Fixes #4323: Add bulk edit view for power panels

This commit is contained in:
Jeremy Stretch 2020-03-06 16:05:26 -05:00
parent b22bf0c4b0
commit 2a5bf2a222
5 changed files with 52 additions and 3 deletions

View File

@ -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/).

View File

@ -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(

View File

@ -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

View File

@ -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'),

View File

@ -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(