mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
#11584: Add bulk edit view & tests
This commit is contained in:
@ -1,10 +1,12 @@
|
||||
from django import forms
|
||||
|
||||
from netbox.forms import NetBoxModelBulkEditForm
|
||||
from tenancy.choices import ContactPriorityChoices
|
||||
from tenancy.models import *
|
||||
from utilities.forms import CommentField, DynamicModelChoiceField
|
||||
from utilities.forms import CommentField, DynamicModelChoiceField, add_blank_choice
|
||||
|
||||
__all__ = (
|
||||
'ContactAssignmentBulkEditForm',
|
||||
'ContactBulkEditForm',
|
||||
'ContactGroupBulkEditForm',
|
||||
'ContactRoleBulkEditForm',
|
||||
@ -114,3 +116,24 @@ class ContactBulkEditForm(NetBoxModelBulkEditForm):
|
||||
(None, ('group', 'title', 'phone', 'email', 'address', 'link', 'description')),
|
||||
)
|
||||
nullable_fields = ('group', 'title', 'phone', 'email', 'address', 'link', 'description', 'comments')
|
||||
|
||||
|
||||
class ContactAssignmentBulkEditForm(NetBoxModelBulkEditForm):
|
||||
contact = DynamicModelChoiceField(
|
||||
queryset=Contact.objects.all(),
|
||||
required=False
|
||||
)
|
||||
role = DynamicModelChoiceField(
|
||||
queryset=ContactRole.objects.all(),
|
||||
required=False
|
||||
)
|
||||
priority = forms.ChoiceField(
|
||||
choices=add_blank_choice(ContactPriorityChoices),
|
||||
required=False
|
||||
)
|
||||
|
||||
model = ContactAssignment
|
||||
fieldsets = (
|
||||
(None, ('contact', 'role', 'priority')),
|
||||
)
|
||||
nullable_fields = ('priority',)
|
||||
|
@ -1,3 +1,8 @@
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.urls import reverse
|
||||
|
||||
from dcim.models import Site
|
||||
from tenancy.choices import ContactPriorityChoices
|
||||
from tenancy.models import *
|
||||
from utilities.testing import ViewTestCases, create_tags
|
||||
|
||||
@ -223,3 +228,89 @@ class ContactTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
||||
cls.bulk_edit_data = {
|
||||
'group': contact_groups[1].pk,
|
||||
}
|
||||
|
||||
|
||||
class ContactAssignmentTestCase(
|
||||
ViewTestCases.CreateObjectViewTestCase,
|
||||
ViewTestCases.EditObjectViewTestCase,
|
||||
ViewTestCases.DeleteObjectViewTestCase,
|
||||
ViewTestCases.ListObjectsViewTestCase,
|
||||
ViewTestCases.BulkEditObjectsViewTestCase,
|
||||
ViewTestCases.BulkDeleteObjectsViewTestCase
|
||||
):
|
||||
model = ContactAssignment
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(cls):
|
||||
|
||||
sites = (
|
||||
Site(name='Site 1', slug='site-1'),
|
||||
Site(name='Site 2', slug='site-2'),
|
||||
Site(name='Site 3', slug='site-3'),
|
||||
Site(name='Site 4', slug='site-4'),
|
||||
)
|
||||
Site.objects.bulk_create(sites)
|
||||
|
||||
contacts = (
|
||||
Contact(name='Contact 1'),
|
||||
Contact(name='Contact 2'),
|
||||
Contact(name='Contact 3'),
|
||||
Contact(name='Contact 4'),
|
||||
)
|
||||
Contact.objects.bulk_create(contacts)
|
||||
|
||||
contact_roles = (
|
||||
ContactRole(name='Contact Role 1', slug='contact-role-1'),
|
||||
ContactRole(name='Contact Role 2', slug='contact-role-2'),
|
||||
ContactRole(name='Contact Role 3', slug='contact-role-3'),
|
||||
ContactRole(name='Contact Role 4', slug='contact-role-4'),
|
||||
)
|
||||
ContactRole.objects.bulk_create(contact_roles)
|
||||
|
||||
assignments = (
|
||||
ContactAssignment(
|
||||
object=sites[0],
|
||||
contact=contacts[0],
|
||||
role=contact_roles[0],
|
||||
priority=ContactPriorityChoices.PRIORITY_PRIMARY
|
||||
),
|
||||
ContactAssignment(
|
||||
object=sites[1],
|
||||
contact=contacts[1],
|
||||
role=contact_roles[1],
|
||||
priority=ContactPriorityChoices.PRIORITY_SECONDARY
|
||||
),
|
||||
ContactAssignment(
|
||||
object=sites[2],
|
||||
contact=contacts[2],
|
||||
role=contact_roles[2],
|
||||
priority=ContactPriorityChoices.PRIORITY_TERTIARY
|
||||
),
|
||||
)
|
||||
ContactAssignment.objects.bulk_create(assignments)
|
||||
|
||||
tags = create_tags('Alpha', 'Bravo', 'Charlie')
|
||||
|
||||
cls.form_data = {
|
||||
'content_type': ContentType.objects.get_for_model(Site).pk,
|
||||
'object_id': sites[3].pk,
|
||||
'contact': contacts[3].pk,
|
||||
'role': contact_roles[3].pk,
|
||||
'priority': ContactPriorityChoices.PRIORITY_INACTIVE,
|
||||
'tags': [t.pk for t in tags],
|
||||
}
|
||||
|
||||
cls.bulk_edit_data = {
|
||||
'role': contact_roles[3].pk,
|
||||
'priority': ContactPriorityChoices.PRIORITY_INACTIVE,
|
||||
}
|
||||
|
||||
def _get_url(self, action, instance=None):
|
||||
# Override creation URL to append content_type & object_id parameters
|
||||
if action == 'add':
|
||||
url = reverse('tenancy:contactassignment_add')
|
||||
content_type = ContentType.objects.get_for_model(Site).pk
|
||||
object_id = Site.objects.first().pk
|
||||
return f"{url}?content_type={content_type}&object_id={object_id}"
|
||||
|
||||
return super()._get_url(action, instance=instance)
|
||||
|
@ -49,6 +49,7 @@ urlpatterns = [
|
||||
# Contact assignments
|
||||
path('contact-assignments/', views.ContactAssignmentListView.as_view(), name='contactassignment_list'),
|
||||
path('contact-assignments/add/', views.ContactAssignmentEditView.as_view(), name='contactassignment_add'),
|
||||
path('contact-assignments/edit/', views.ContactAssignmentBulkEditView.as_view(), name='contactassignment_bulk_edit'),
|
||||
path('contact-assignments/delete/', views.ContactAssignmentBulkDeleteView.as_view(), name='contactassignment_bulk_delete'),
|
||||
path('contact-assignments/<int:pk>/', include(get_model_urls('tenancy', 'contactassignment'))),
|
||||
|
||||
|
@ -349,7 +349,6 @@ class ContactAssignmentListView(generic.ObjectListView):
|
||||
filterset = filtersets.ContactAssignmentFilterSet
|
||||
filterset_form = forms.ContactAssignmentFilterForm
|
||||
table = tables.ContactAssignmentTable
|
||||
actions = ('export', 'bulk_delete')
|
||||
|
||||
|
||||
@register_model_view(ContactAssignment, 'edit')
|
||||
@ -372,6 +371,13 @@ class ContactAssignmentEditView(generic.ObjectEditView):
|
||||
}
|
||||
|
||||
|
||||
class ContactAssignmentBulkEditView(generic.BulkEditView):
|
||||
queryset = ContactAssignment.objects.all()
|
||||
filterset = filtersets.ContactAssignmentFilterSet
|
||||
table = tables.ContactAssignmentTable
|
||||
form = forms.ContactAssignmentBulkEditForm
|
||||
|
||||
|
||||
class ContactAssignmentBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = ContactAssignment.objects.all()
|
||||
filterset = filtersets.ContactAssignmentFilterSet
|
||||
|
Reference in New Issue
Block a user