From c1639b778130f684b525acde484e124a99ee8260 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 4 Feb 2020 16:06:55 -0500 Subject: [PATCH] Move component bulk delete views to new URLs --- netbox/dcim/tests/test_views.py | 8 -------- netbox/dcim/urls.py | 16 ++++++++-------- netbox/dcim/views.py | 16 ++++++++-------- netbox/templates/dcim/device.html | 12 ++++++------ .../templates/virtualization/virtualmachine.html | 2 +- netbox/utilities/views.py | 9 --------- netbox/virtualization/urls.py | 3 ++- 7 files changed, 25 insertions(+), 41 deletions(-) diff --git a/netbox/dcim/tests/test_views.py b/netbox/dcim/tests/test_views.py index aa880b67d..baf80b522 100644 --- a/netbox/dcim/tests/test_views.py +++ b/netbox/dcim/tests/test_views.py @@ -686,7 +686,6 @@ class ConsolePortTestCase(StandardTestCases.Views): # TODO test_create_object = None - test_bulk_delete_objects = None @classmethod def setUpTestData(cls): @@ -728,7 +727,6 @@ class ConsoleServerPortTestCase(StandardTestCases.Views): # TODO test_create_object = None test_bulk_edit_objects = None - test_bulk_delete_objects = None @classmethod def setUpTestData(cls): @@ -769,7 +767,6 @@ class PowerPortTestCase(StandardTestCases.Views): # TODO test_create_object = None - test_bulk_delete_objects = None @classmethod def setUpTestData(cls): @@ -812,7 +809,6 @@ class PowerOutletTestCase(StandardTestCases.Views): # TODO test_create_object = None test_bulk_edit_objects = None - test_bulk_delete_objects = None @classmethod def setUpTestData(cls): @@ -858,7 +854,6 @@ class InterfaceTestCase(StandardTestCases.Views): # TODO test_create_object = None test_bulk_edit_objects = None - test_bulk_delete_objects = None @classmethod def setUpTestData(cls): @@ -916,7 +911,6 @@ class FrontPortTestCase(StandardTestCases.Views): # TODO test_create_object = None test_bulk_edit_objects = None - test_bulk_delete_objects = None @classmethod def setUpTestData(cls): @@ -968,7 +962,6 @@ class RearPortTestCase(StandardTestCases.Views): # TODO test_create_object = None test_bulk_edit_objects = None - test_bulk_delete_objects = None @classmethod def setUpTestData(cls): @@ -1009,7 +1002,6 @@ class DeviceBayTestCase(StandardTestCases.Views): # TODO test_create_object = None test_bulk_edit_objects = None - test_bulk_delete_objects = None @classmethod def setUpTestData(cls): diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index ddc322da2..fd2f165d4 100644 --- a/netbox/dcim/urls.py +++ b/netbox/dcim/urls.py @@ -170,9 +170,9 @@ urlpatterns = [ # Console ports path(r'devices/console-ports/add/', views.DeviceBulkAddConsolePortView.as_view(), name='device_bulk_add_consoleport'), path(r'devices//console-ports/add/', views.ConsolePortCreateView.as_view(), name='consoleport_add'), - path(r'devices//console-ports/delete/', views.ConsolePortBulkDeleteView.as_view(), name='consoleport_bulk_delete'), path(r'console-ports/', views.ConsolePortListView.as_view(), name='consoleport_list'), path(r'console-ports/import/', views.ConsolePortBulkImportView.as_view(), name='consoleport_import'), + path(r'console-ports/delete/', views.ConsolePortBulkDeleteView.as_view(), name='consoleport_bulk_delete'), path(r'console-ports//connect//', views.CableCreateView.as_view(), name='consoleport_connect', kwargs={'termination_a_type': ConsolePort}), path(r'console-ports//edit/', views.ConsolePortEditView.as_view(), name='consoleport_edit'), path(r'console-ports//delete/', views.ConsolePortDeleteView.as_view(), name='consoleport_delete'), @@ -182,11 +182,11 @@ urlpatterns = [ path(r'devices/console-server-ports/add/', views.DeviceBulkAddConsoleServerPortView.as_view(), name='device_bulk_add_consoleserverport'), path(r'devices//console-server-ports/add/', views.ConsoleServerPortCreateView.as_view(), name='consoleserverport_add'), path(r'devices//console-server-ports/edit/', views.ConsoleServerPortBulkEditView.as_view(), name='consoleserverport_bulk_edit'), - path(r'devices//console-server-ports/delete/', views.ConsoleServerPortBulkDeleteView.as_view(), name='consoleserverport_bulk_delete'), path(r'console-server-ports/', views.ConsoleServerPortListView.as_view(), name='consoleserverport_list'), path(r'console-server-ports/rename/', views.ConsoleServerPortBulkRenameView.as_view(), name='consoleserverport_bulk_rename'), path(r'console-server-ports/disconnect/', views.ConsoleServerPortBulkDisconnectView.as_view(), name='consoleserverport_bulk_disconnect'), path(r'console-server-ports/import/', views.ConsoleServerPortBulkImportView.as_view(), name='consoleserverport_import'), + path(r'console-server-ports/delete/', views.ConsoleServerPortBulkDeleteView.as_view(), name='consoleserverport_bulk_delete'), path(r'console-server-ports//connect//', views.CableCreateView.as_view(), name='consoleserverport_connect', kwargs={'termination_a_type': ConsoleServerPort}), path(r'console-server-ports//edit/', views.ConsoleServerPortEditView.as_view(), name='consoleserverport_edit'), path(r'console-server-ports//delete/', views.ConsoleServerPortDeleteView.as_view(), name='consoleserverport_delete'), @@ -195,9 +195,9 @@ urlpatterns = [ # Power ports path(r'devices/power-ports/add/', views.DeviceBulkAddPowerPortView.as_view(), name='device_bulk_add_powerport'), path(r'devices//power-ports/add/', views.PowerPortCreateView.as_view(), name='powerport_add'), - path(r'devices//power-ports/delete/', views.PowerPortBulkDeleteView.as_view(), name='powerport_bulk_delete'), path(r'power-ports/', views.PowerPortListView.as_view(), name='powerport_list'), path(r'power-ports/import/', views.PowerPortBulkImportView.as_view(), name='powerport_import'), + path(r'power-ports/delete/', views.PowerPortBulkDeleteView.as_view(), name='powerport_bulk_delete'), path(r'power-ports//connect//', views.CableCreateView.as_view(), name='powerport_connect', kwargs={'termination_a_type': PowerPort}), path(r'power-ports//edit/', views.PowerPortEditView.as_view(), name='powerport_edit'), path(r'power-ports//delete/', views.PowerPortDeleteView.as_view(), name='powerport_delete'), @@ -207,11 +207,11 @@ urlpatterns = [ path(r'devices/power-outlets/add/', views.DeviceBulkAddPowerOutletView.as_view(), name='device_bulk_add_poweroutlet'), path(r'devices//power-outlets/add/', views.PowerOutletCreateView.as_view(), name='poweroutlet_add'), path(r'devices//power-outlets/edit/', views.PowerOutletBulkEditView.as_view(), name='poweroutlet_bulk_edit'), - path(r'devices//power-outlets/delete/', views.PowerOutletBulkDeleteView.as_view(), name='poweroutlet_bulk_delete'), path(r'power-outlets/', views.PowerOutletListView.as_view(), name='poweroutlet_list'), path(r'power-outlets/rename/', views.PowerOutletBulkRenameView.as_view(), name='poweroutlet_bulk_rename'), path(r'power-outlets/disconnect/', views.PowerOutletBulkDisconnectView.as_view(), name='poweroutlet_bulk_disconnect'), path(r'power-outlets/import/', views.PowerOutletBulkImportView.as_view(), name='poweroutlet_import'), + path(r'power-outlets/delete/', views.PowerOutletBulkDeleteView.as_view(), name='poweroutlet_bulk_delete'), path(r'power-outlets//connect//', views.CableCreateView.as_view(), name='poweroutlet_connect', kwargs={'termination_a_type': PowerOutlet}), path(r'power-outlets//edit/', views.PowerOutletEditView.as_view(), name='poweroutlet_edit'), path(r'power-outlets//delete/', views.PowerOutletDeleteView.as_view(), name='poweroutlet_delete'), @@ -221,11 +221,11 @@ urlpatterns = [ path(r'devices/interfaces/add/', views.DeviceBulkAddInterfaceView.as_view(), name='device_bulk_add_interface'), path(r'devices//interfaces/add/', views.InterfaceCreateView.as_view(), name='interface_add'), path(r'devices//interfaces/edit/', views.InterfaceBulkEditView.as_view(), name='interface_bulk_edit'), - path(r'devices//interfaces/delete/', views.InterfaceBulkDeleteView.as_view(), name='interface_bulk_delete'), path(r'interfaces/', views.InterfaceListView.as_view(), name='interface_list'), path(r'interfaces/rename/', views.InterfaceBulkRenameView.as_view(), name='interface_bulk_rename'), path(r'interfaces/disconnect/', views.InterfaceBulkDisconnectView.as_view(), name='interface_bulk_disconnect'), path(r'interfaces/import/', views.InterfaceBulkImportView.as_view(), name='interface_import'), + path(r'interfaces/delete/', views.InterfaceBulkDeleteView.as_view(), name='interface_bulk_delete'), path(r'interfaces//connect//', views.CableCreateView.as_view(), name='interface_connect', kwargs={'termination_a_type': Interface}), path(r'interfaces//', views.InterfaceView.as_view(), name='interface'), path(r'interfaces//edit/', views.InterfaceEditView.as_view(), name='interface_edit'), @@ -237,11 +237,11 @@ urlpatterns = [ # path(r'devices/front-ports/add/', views.DeviceBulkAddFrontPortView.as_view(), name='device_bulk_add_frontport'), path(r'devices//front-ports/add/', views.FrontPortCreateView.as_view(), name='frontport_add'), path(r'devices//front-ports/edit/', views.FrontPortBulkEditView.as_view(), name='frontport_bulk_edit'), - path(r'devices//front-ports/delete/', views.FrontPortBulkDeleteView.as_view(), name='frontport_bulk_delete'), path(r'front-ports/', views.FrontPortListView.as_view(), name='frontport_list'), path(r'front-ports/rename/', views.FrontPortBulkRenameView.as_view(), name='frontport_bulk_rename'), path(r'front-ports/disconnect/', views.FrontPortBulkDisconnectView.as_view(), name='frontport_bulk_disconnect'), path(r'front-ports/import/', views.FrontPortBulkImportView.as_view(), name='frontport_import'), + path(r'front-ports/delete/', views.FrontPortBulkDeleteView.as_view(), name='frontport_bulk_delete'), path(r'front-ports//connect//', views.CableCreateView.as_view(), name='frontport_connect', kwargs={'termination_a_type': FrontPort}), path(r'front-ports//edit/', views.FrontPortEditView.as_view(), name='frontport_edit'), path(r'front-ports//delete/', views.FrontPortDeleteView.as_view(), name='frontport_delete'), @@ -251,11 +251,11 @@ urlpatterns = [ # path(r'devices/rear-ports/add/', views.DeviceBulkAddRearPortView.as_view(), name='device_bulk_add_rearport'), path(r'devices//rear-ports/add/', views.RearPortCreateView.as_view(), name='rearport_add'), path(r'devices//rear-ports/edit/', views.RearPortBulkEditView.as_view(), name='rearport_bulk_edit'), - path(r'devices//rear-ports/delete/', views.RearPortBulkDeleteView.as_view(), name='rearport_bulk_delete'), path(r'rear-ports/', views.RearPortListView.as_view(), name='rearport_list'), path(r'rear-ports/rename/', views.RearPortBulkRenameView.as_view(), name='rearport_bulk_rename'), path(r'rear-ports/disconnect/', views.RearPortBulkDisconnectView.as_view(), name='rearport_bulk_disconnect'), path(r'rear-ports/import/', views.RearPortBulkImportView.as_view(), name='rearport_import'), + path(r'rear-ports/delete/', views.RearPortBulkDeleteView.as_view(), name='rearport_bulk_delete'), path(r'rear-ports//connect//', views.CableCreateView.as_view(), name='rearport_connect', kwargs={'termination_a_type': RearPort}), path(r'rear-ports//edit/', views.RearPortEditView.as_view(), name='rearport_edit'), path(r'rear-ports//delete/', views.RearPortDeleteView.as_view(), name='rearport_delete'), @@ -264,10 +264,10 @@ urlpatterns = [ # Device bays path(r'devices/device-bays/add/', views.DeviceBulkAddDeviceBayView.as_view(), name='device_bulk_add_devicebay'), path(r'devices//bays/add/', views.DeviceBayCreateView.as_view(), name='devicebay_add'), - path(r'devices//bays/delete/', views.DeviceBayBulkDeleteView.as_view(), name='devicebay_bulk_delete'), path(r'device-bays/', views.DeviceBayListView.as_view(), name='devicebay_list'), path(r'device-bays/rename/', views.DeviceBayBulkRenameView.as_view(), name='devicebay_bulk_rename'), path(r'device-bays/import/', views.DeviceBayBulkImportView.as_view(), name='devicebay_import'), + path(r'device-bays/delete/', views.DeviceBayBulkDeleteView.as_view(), name='devicebay_bulk_delete'), path(r'device-bays//edit/', views.DeviceBayEditView.as_view(), name='devicebay_edit'), path(r'device-bays//delete/', views.DeviceBayDeleteView.as_view(), name='devicebay_delete'), path(r'device-bays//populate/', views.DeviceBayPopulateView.as_view(), name='devicebay_populate'), diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index fd3d09ab7..2fdf7f457 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1234,8 +1234,8 @@ class ConsolePortBulkImportView(PermissionRequiredMixin, BulkImportView): class ConsolePortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_consoleport' queryset = ConsolePort.objects.all() - parent_model = Device table = tables.ConsolePortTable + default_return_url = 'dcim:consoleport_list' # @@ -1302,8 +1302,8 @@ class ConsoleServerPortBulkDisconnectView(PermissionRequiredMixin, BulkDisconnec class ConsoleServerPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_consoleserverport' queryset = ConsoleServerPort.objects.all() - parent_model = Device table = tables.ConsoleServerPortTable + default_return_url = 'dcim:consoleserverport_list' # @@ -1350,8 +1350,8 @@ class PowerPortBulkImportView(PermissionRequiredMixin, BulkImportView): class PowerPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_powerport' queryset = PowerPort.objects.all() - parent_model = Device table = tables.PowerPortTable + default_return_url = 'dcim:powerport_list' # @@ -1418,8 +1418,8 @@ class PowerOutletBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView) class PowerOutletBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_poweroutlet' queryset = PowerOutlet.objects.all() - parent_model = Device table = tables.PowerOutletTable + default_return_url = 'dcim:poweroutlet_list' # @@ -1523,8 +1523,8 @@ class InterfaceBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView): class InterfaceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_interface' queryset = Interface.objects.all() - parent_model = Device table = tables.InterfaceTable + default_return_url = 'dcim:interface_list' # @@ -1591,8 +1591,8 @@ class FrontPortBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView): class FrontPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_frontport' queryset = FrontPort.objects.all() - parent_model = Device table = tables.FrontPortTable + default_return_url = 'dcim:frontport_list' # @@ -1659,8 +1659,8 @@ class RearPortBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView): class RearPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_rearport' queryset = RearPort.objects.all() - parent_model = Device table = tables.RearPortTable + default_return_url = 'dcim:rearport_list' # @@ -1784,8 +1784,8 @@ class DeviceBayBulkRenameView(PermissionRequiredMixin, BulkRenameView): class DeviceBayBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'dcim.delete_devicebay' queryset = DeviceBay.objects.all() - parent_model = Device table = tables.DeviceBayTable + default_return_url = 'dcim:devicebay_list' # diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index fa37f1ac5..57c068727 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -524,7 +524,7 @@ {% endif %} {% if device_bays and perms.dcim.delete_devicebay %} - {% endif %} @@ -597,7 +597,7 @@ {% endif %} {% if interfaces and perms.dcim.delete_interface %} - {% endif %} @@ -657,7 +657,7 @@ {% endif %} {% if consoleserverports and perms.dcim.delete_consoleserverport %} - {% endif %} @@ -718,7 +718,7 @@ {% endif %} {% if poweroutlets and perms.dcim.delete_poweroutlet %} - {% endif %} @@ -778,7 +778,7 @@ {% endif %} {% if front_ports and perms.dcim.delete_frontport %} - {% endif %} @@ -835,7 +835,7 @@ {% endif %} {% if rear_ports and perms.dcim.delete_rearport %} - {% endif %} diff --git a/netbox/templates/virtualization/virtualmachine.html b/netbox/templates/virtualization/virtualmachine.html index 982ef0e5e..a1887be6d 100644 --- a/netbox/templates/virtualization/virtualmachine.html +++ b/netbox/templates/virtualization/virtualmachine.html @@ -293,7 +293,7 @@ {% endif %} {% if interfaces and perms.dcim.delete_interface %} - {% endif %} diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index df73d480b..f32c57c3f 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -742,14 +742,12 @@ class BulkDeleteView(GetReturnURLMixin, View): Delete objects in bulk. queryset: Custom queryset to use when retrieving objects (e.g. to select related objects) - parent_model: The model of the parent object (if any) filter: FilterSet to apply when deleting by QuerySet table: The table used to display devices being deleted form: The form class used to delete objects in bulk template_name: The name of the template """ queryset = None - parent_model = None filterset = None table = None form = None @@ -762,12 +760,6 @@ class BulkDeleteView(GetReturnURLMixin, View): model = self.queryset.model - # Attempt to derive parent object if a parent class has been given - if self.parent_model: - parent_obj = get_object_or_404(self.parent_model, **kwargs) - else: - parent_obj = None - # Are we deleting *all* objects in the queryset or just a selected subset? if request.POST.get('_all'): if self.filterset is not None: @@ -809,7 +801,6 @@ class BulkDeleteView(GetReturnURLMixin, View): return render(request, self.template_name, { 'form': form, - 'parent_obj': parent_obj, 'obj_type_plural': model._meta.verbose_name_plural, 'table': table, 'return_url': self.get_return_url(request), diff --git a/netbox/virtualization/urls.py b/netbox/virtualization/urls.py index 7cc28be51..88a8dc6d9 100644 --- a/netbox/virtualization/urls.py +++ b/netbox/virtualization/urls.py @@ -54,7 +54,8 @@ urlpatterns = [ path(r'virtual-machines/interfaces/add/', views.VirtualMachineBulkAddInterfaceView.as_view(), name='virtualmachine_bulk_add_interface'), path(r'virtual-machines//interfaces/add/', views.InterfaceCreateView.as_view(), name='interface_add'), path(r'virtual-machines//interfaces/edit/', views.InterfaceBulkEditView.as_view(), name='interface_bulk_edit'), - path(r'virtual-machines//interfaces/delete/', views.InterfaceBulkDeleteView.as_view(), name='interface_bulk_delete'), + path(r'interfaces/delete/', views.InterfaceBulkDeleteView.as_view(), name='interface_bulk_delete'), + # TODO: Rename vm-interfaces to interfaces path(r'vm-interfaces//edit/', views.InterfaceEditView.as_view(), name='interface_edit'), path(r'vm-interfaces//delete/', views.InterfaceDeleteView.as_view(), name='interface_delete'),