diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 1f5b73603..c4bca327f 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -2616,6 +2616,13 @@ class InterfaceBulkEditView(generic.BulkEditView): table = tables.InterfaceTable form = forms.InterfaceBulkEditForm + def extra_object_field_operations(self, form, obj): + # Add/remove tagged VLANs + if form.cleaned_data.get('add_tagged_vlans', None): + obj.tagged_vlans.add(*form.cleaned_data['add_tagged_vlans']) + if form.cleaned_data.get('remove_tagged_vlans', None): + obj.tagged_vlans.remove(*form.cleaned_data['remove_tagged_vlans']) + class InterfaceBulkRenameView(generic.BulkRenameView): queryset = Interface.objects.all() diff --git a/netbox/netbox/views/generic/bulk_views.py b/netbox/netbox/views/generic/bulk_views.py index c3478e316..c5582e1b0 100644 --- a/netbox/netbox/views/generic/bulk_views.py +++ b/netbox/netbox/views/generic/bulk_views.py @@ -541,6 +541,9 @@ class BulkEditView(GetReturnURLMixin, BaseMultiObjectView): def get_required_permission(self): return get_permission_for_model(self.queryset.model, 'change') + def extra_object_field_operations(self, form, obj): + pass + def _update_objects(self, form, request): custom_fields = getattr(form, 'custom_fields', {}) standard_fields = [ @@ -615,11 +618,7 @@ class BulkEditView(GetReturnURLMixin, BaseMultiObjectView): if form.cleaned_data.get('remove_tags', None): obj.tags.remove(*form.cleaned_data['remove_tags']) - # Add/remove tagged VLANs - if form.cleaned_data.get('add_tagged_vlans', None): - obj.tagged_vlans.add(*form.cleaned_data['add_tagged_vlans']) - if form.cleaned_data.get('remove_tagged_vlans', None): - obj.tagged_vlans.remove(*form.cleaned_data['remove_tagged_vlans']) + self.extra_object_field_operations(form, obj) # Rebuild the tree for MPTT models if issubclass(self.queryset.model, MPTTModel):