From 83793de408ce745f8c20345785378d7a6399e112 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 17 Mar 2025 11:48:43 -0700 Subject: [PATCH] 17178 review changes --- netbox/tenancy/filtersets.py | 4 ++-- netbox/tenancy/forms/bulk_edit.py | 15 +++++++++++---- netbox/tenancy/forms/filtersets.py | 4 ++-- netbox/tenancy/tests/test_filtersets.py | 5 +++-- netbox/tenancy/views.py | 9 +++++++++ 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/netbox/tenancy/filtersets.py b/netbox/tenancy/filtersets.py index a34accf3a..0042ca427 100644 --- a/netbox/tenancy/filtersets.py +++ b/netbox/tenancy/filtersets.py @@ -65,13 +65,13 @@ class ContactRoleFilterSet(OrganizationalModelFilterSet): class ContactFilterSet(NetBoxModelFilterSet): - contact_group_id = TreeNodeMultipleChoiceFilter( + group_id = TreeNodeMultipleChoiceFilter( queryset=ContactGroup.objects.all(), field_name='groups', lookup_expr='in', label=_('Contact group (ID)'), ) - contact_group = TreeNodeMultipleChoiceFilter( + group = TreeNodeMultipleChoiceFilter( queryset=ContactGroup.objects.all(), field_name='groups', to_field_name='slug', diff --git a/netbox/tenancy/forms/bulk_edit.py b/netbox/tenancy/forms/bulk_edit.py index 3f4ebad31..91ced9c05 100644 --- a/netbox/tenancy/forms/bulk_edit.py +++ b/netbox/tenancy/forms/bulk_edit.py @@ -90,8 +90,13 @@ class ContactRoleBulkEditForm(NetBoxModelBulkEditForm): class ContactBulkEditForm(NetBoxModelBulkEditForm): - groups = DynamicModelMultipleChoiceField( - label=_('Groups'), + add_groups = DynamicModelMultipleChoiceField( + label=_('Add groups'), + queryset=ContactGroup.objects.all(), + required=False + ) + remove_groups = DynamicModelMultipleChoiceField( + label=_('Remove groups'), queryset=ContactGroup.objects.all(), required=False ) @@ -127,9 +132,11 @@ class ContactBulkEditForm(NetBoxModelBulkEditForm): model = Contact fieldsets = ( - FieldSet('groups', 'title', 'phone', 'email', 'address', 'link', 'description'), + FieldSet('add_groups', 'remove_groups', 'title', 'phone', 'email', 'address', 'link', 'description'), + ) + nullable_fields = ( + 'add_groups', 'remove_groups', 'title', 'phone', 'email', 'address', 'link', 'description', 'comments' ) - nullable_fields = ('groups', 'title', 'phone', 'email', 'address', 'link', 'description', 'comments') class ContactAssignmentBulkEditForm(NetBoxModelBulkEditForm): diff --git a/netbox/tenancy/forms/filtersets.py b/netbox/tenancy/forms/filtersets.py index 75db01770..6541d9693 100644 --- a/netbox/tenancy/forms/filtersets.py +++ b/netbox/tenancy/forms/filtersets.py @@ -71,11 +71,11 @@ class ContactRoleFilterForm(NetBoxModelFilterSetForm): class ContactFilterForm(NetBoxModelFilterSetForm): model = Contact - contact_group_id = DynamicModelMultipleChoiceField( + group_id = DynamicModelMultipleChoiceField( queryset=ContactGroup.objects.all(), required=False, null_option='None', - label=_('Group') + label=_('Groups') ) tag = TagFilterField(model) diff --git a/netbox/tenancy/tests/test_filtersets.py b/netbox/tenancy/tests/test_filtersets.py index ff88f8e10..d44d78ec4 100644 --- a/netbox/tenancy/tests/test_filtersets.py +++ b/netbox/tenancy/tests/test_filtersets.py @@ -241,6 +241,7 @@ class ContactRoleTestCase(TestCase, ChangeLoggedFilterSetTests): class ContactTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = Contact.objects.all() filterset = ContactFilterSet + ignore_fields = ('groups',) @classmethod def setUpTestData(cls): @@ -277,9 +278,9 @@ class ContactTestCase(TestCase, ChangeLoggedFilterSetTests): def test_group(self): group = ContactGroup.objects.all()[:2] - params = {'contact_group_id': [group[0].pk, group[1].pk]} + params = {'group_id': [group[0].pk, group[1].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) - params = {'contact_group': [group[0].slug, group[1].slug]} + params = {'group': [group[0].slug, group[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index 4ddee9c7a..c86ffe789 100644 --- a/netbox/tenancy/views.py +++ b/netbox/tenancy/views.py @@ -400,6 +400,15 @@ class ContactAssignmentBulkEditView(generic.BulkEditView): table = tables.ContactAssignmentTable form = forms.ContactAssignmentBulkEditForm + def post_save_operations(self, form, obj): + super().post_save_operations(form, obj) + + # Add/remove groups + if form.cleaned_data.get('add_groups', None): + obj.groups.add(*form.cleaned_data['add_groups']) + if form.cleaned_data.get('remove_groups', None): + obj.groups.remove(*form.cleaned_data['remove_groups']) + @register_model_view(ContactAssignment, 'bulk_delete', path='delete', detail=False) class ContactAssignmentBulkDeleteView(generic.BulkDeleteView):