Просмотр исходного кода

Fixes #4323: Add bulk edit view for power panels

Jeremy Stretch 6 лет назад
Родитель
Сommit
2a5bf2a222

+ 8 - 0
docs/release-notes/version-2.7.md

@@ -1,3 +1,11 @@
+# v2.7.10 (FUTURE)
+
+## Enhancements
+
+* [#4323](https://github.com/netbox-community/netbox/issues/4323) - Add bulk edit view for power panels
+
+---
+
 # v2.7.9 (2020-03-06)
 
 **Note:** This release will deploy a Python virtual environment on upgrade in the `venv/` directory. This will require modifying the paths to your Python and gunicorn executables in the systemd service files. For more detail, please see the [upgrade instructions](https://netbox.readthedocs.io/en/stable/installation/upgrading/).

+ 29 - 0
netbox/dcim/forms.py

@@ -4621,6 +4621,35 @@ class PowerPanelCSVForm(forms.ModelForm):
                 )
 
 
+class PowerPanelBulkEditForm(BootstrapMixin, BulkEditForm):
+    pk = forms.ModelMultipleChoiceField(
+        queryset=PowerPanel.objects.all(),
+        widget=forms.MultipleHiddenInput
+    )
+    site = DynamicModelChoiceField(
+        queryset=Site.objects.all(),
+        required=False,
+        widget=APISelect(
+            api_url="/api/dcim/sites/",
+            filter_for={
+                'rack_group': 'site_id',
+            }
+        )
+    )
+    rack_group = DynamicModelChoiceField(
+        queryset=RackGroup.objects.all(),
+        required=False,
+        widget=APISelect(
+            api_url="/api/dcim/rack-groups/"
+        )
+    )
+
+    class Meta:
+        nullable_fields = (
+            'rack_group',
+        )
+
+
 class PowerPanelFilterForm(BootstrapMixin, CustomFieldFilterForm):
     model = PowerPanel
     q = forms.CharField(

+ 5 - 3
netbox/dcim/tests/test_views.py

@@ -1553,9 +1553,6 @@ class VirtualChassisTestCase(ViewTestCases.PrimaryObjectViewTestCase):
 class PowerPanelTestCase(ViewTestCases.PrimaryObjectViewTestCase):
     model = PowerPanel
 
-    # Disable inapplicable tests
-    test_bulk_edit_objects = None
-
     @classmethod
     def setUpTestData(cls):
 
@@ -1590,6 +1587,11 @@ class PowerPanelTestCase(ViewTestCases.PrimaryObjectViewTestCase):
             "Site 1,Rack Group 1,Power Panel 6",
         )
 
+        cls.bulk_edit_data = {
+            'site': sites[1].pk,
+            'rack_group': rackgroups[1].pk,
+        }
+
 
 class PowerFeedTestCase(ViewTestCases.PrimaryObjectViewTestCase):
     model = PowerFeed

+ 1 - 0
netbox/dcim/urls.py

@@ -331,6 +331,7 @@ urlpatterns = [
     path('power-panels/', views.PowerPanelListView.as_view(), name='powerpanel_list'),
     path('power-panels/add/', views.PowerPanelCreateView.as_view(), name='powerpanel_add'),
     path('power-panels/import/', views.PowerPanelBulkImportView.as_view(), name='powerpanel_import'),
+    path('power-panels/edit/', views.PowerPanelBulkEditView.as_view(), name='powerpanel_bulk_edit'),
     path('power-panels/delete/', views.PowerPanelBulkDeleteView.as_view(), name='powerpanel_bulk_delete'),
     path('power-panels/<int:pk>/', views.PowerPanelView.as_view(), name='powerpanel'),
     path('power-panels/<int:pk>/edit/', views.PowerPanelEditView.as_view(), name='powerpanel_edit'),

+ 9 - 0
netbox/dcim/views.py

@@ -2569,6 +2569,15 @@ class PowerPanelBulkImportView(PermissionRequiredMixin, BulkImportView):
     default_return_url = 'dcim:powerpanel_list'
 
 
+class PowerPanelBulkEditView(PermissionRequiredMixin, BulkEditView):
+    permission_required = 'dcim.change_powerpanel'
+    queryset = PowerPanel.objects.prefetch_related('site', 'rack_group')
+    filterset = filters.PowerPanelFilterSet
+    table = tables.PowerPanelTable
+    form = forms.PowerPanelBulkEditForm
+    default_return_url = 'dcim:powerpanel_list'
+
+
 class PowerPanelBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_powerpanel'
     queryset = PowerPanel.objects.prefetch_related(