diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 29710971e..98b321b90 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -4388,6 +4388,20 @@ class VCMemberSelectForm(BootstrapMixin, forms.Form): return device +class VirtualChassisBulkEditForm(BootstrapMixin, BulkEditForm): + pk = forms.ModelMultipleChoiceField( + queryset=VirtualChassis.objects.all(), + widget=forms.MultipleHiddenInput() + ) + domain = forms.CharField( + max_length=30, + required=False + ) + + class Meta: + nullable_fields = ['domain'] + + class VirtualChassisFilterForm(BootstrapMixin, CustomFieldFilterForm): model = VirtualChassis q = forms.CharField( diff --git a/netbox/dcim/tests/test_views.py b/netbox/dcim/tests/test_views.py index 2feaf625b..b1aaf4449 100644 --- a/netbox/dcim/tests/test_views.py +++ b/netbox/dcim/tests/test_views.py @@ -1507,10 +1507,7 @@ class VirtualChassisTestCase(ViewTestCases.PrimaryObjectViewTestCase): model = VirtualChassis # Disable inapplicable tests - test_get_object = None test_import_objects = None - test_bulk_edit_objects = None - test_bulk_delete_objects = None # TODO: Requires special form handling test_create_object = None diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index cbaea4b76..0b1f6250e 100644 --- a/netbox/dcim/urls.py +++ b/netbox/dcim/urls.py @@ -321,6 +321,8 @@ urlpatterns = [ # Virtual chassis path('virtual-chassis/', views.VirtualChassisListView.as_view(), name='virtualchassis_list'), path('virtual-chassis/add/', views.VirtualChassisCreateView.as_view(), name='virtualchassis_add'), + path('virtual-chassis/edit/', views.VirtualChassisBulkEditView.as_view(), name='virtualchassis_bulk_edit'), + path('virtual-chassis/delete/', views.VirtualChassisBulkDeleteView.as_view(), name='virtualchassis_bulk_delete'), path('virtual-chassis//', views.VirtualChassisView.as_view(), name='virtualchassis'), path('virtual-chassis//edit/', views.VirtualChassisEditView.as_view(), name='virtualchassis_edit'), path('virtual-chassis//delete/', views.VirtualChassisDeleteView.as_view(), name='virtualchassis_delete'), diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 78b54789d..66b59add4 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -2605,6 +2605,23 @@ class VirtualChassisRemoveMemberView(PermissionRequiredMixin, GetReturnURLMixin, }) +class VirtualChassisBulkEditView(PermissionRequiredMixin, BulkEditView): + permission_required = 'dcim.change_virtualchassis' + queryset = VirtualChassis.objects.all() + filterset = filters.VirtualChassisFilterSet + table = tables.VirtualChassisTable + form = forms.VirtualChassisBulkEditForm + default_return_url = 'dcim:virtualchassis_list' + + +class VirtualChassisBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): + permission_required = 'dcim.delete_virtualchassis' + queryset = VirtualChassis.objects.all() + filterset = filters.VirtualChassisFilterSet + table = tables.VirtualChassisTable + default_return_url = 'dcim:virtualchassis_list' + + # # Power panels #