diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index b1bb8daf5..671e514dc 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1043,12 +1043,14 @@ def consoleport_disconnect(request, pk): class ConsolePortEditView(PermissionRequiredMixin, ComponentEditView): permission_required = 'dcim.change_consoleport' model = ConsolePort + parent_field = 'device' form_class = forms.ConsolePortForm class ConsolePortDeleteView(PermissionRequiredMixin, ComponentDeleteView): permission_required = 'dcim.delete_consoleport' model = ConsolePort + parent_field = 'device' class ConsolePortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): @@ -1161,12 +1163,14 @@ def consoleserverport_disconnect(request, pk): class ConsoleServerPortEditView(PermissionRequiredMixin, ComponentEditView): permission_required = 'dcim.change_consoleserverport' model = ConsoleServerPort + parent_field = 'device' form_class = forms.ConsoleServerPortForm class ConsoleServerPortDeleteView(PermissionRequiredMixin, ComponentDeleteView): permission_required = 'dcim.delete_consoleserverport' model = ConsoleServerPort + parent_field = 'device' class ConsoleServerPortBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView): @@ -1278,12 +1282,14 @@ def powerport_disconnect(request, pk): class PowerPortEditView(PermissionRequiredMixin, ComponentEditView): permission_required = 'dcim.change_powerport' model = PowerPort + parent_field = 'device' form_class = forms.PowerPortForm class PowerPortDeleteView(PermissionRequiredMixin, ComponentDeleteView): permission_required = 'dcim.delete_powerport' model = PowerPort + parent_field = 'device' class PowerPortBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): @@ -1396,12 +1402,14 @@ def poweroutlet_disconnect(request, pk): class PowerOutletEditView(PermissionRequiredMixin, ComponentEditView): permission_required = 'dcim.change_poweroutlet' model = PowerOutlet + parent_field = 'device' form_class = forms.PowerOutletForm class PowerOutletDeleteView(PermissionRequiredMixin, ComponentDeleteView): permission_required = 'dcim.delete_poweroutlet' model = PowerOutlet + parent_field = 'device' class PowerOutletBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView): @@ -1439,12 +1447,14 @@ class InterfaceCreateView(PermissionRequiredMixin, ComponentCreateView): class InterfaceEditView(PermissionRequiredMixin, ComponentEditView): permission_required = 'dcim.change_interface' model = Interface + parent_field = 'device' form_class = forms.InterfaceForm class InterfaceDeleteView(PermissionRequiredMixin, ComponentDeleteView): permission_required = 'dcim.delete_interface' model = Interface + parent_field = 'device' class InterfaceBulkDisconnectView(PermissionRequiredMixin, BulkDisconnectView): @@ -1491,12 +1501,14 @@ class DeviceBayCreateView(PermissionRequiredMixin, ComponentCreateView): class DeviceBayEditView(PermissionRequiredMixin, ComponentEditView): permission_required = 'dcim.change_devicebay' model = DeviceBay + parent_field = 'device' form_class = forms.DeviceBayForm class DeviceBayDeleteView(PermissionRequiredMixin, ComponentDeleteView): permission_required = 'dcim.delete_devicebay' model = DeviceBay + parent_field = 'device' @permission_required('dcim.change_devicebay') @@ -1803,6 +1815,7 @@ class InterfaceConnectionsListView(ObjectListView): class InventoryItemEditView(PermissionRequiredMixin, ComponentEditView): permission_required = 'dcim.change_inventoryitem' model = InventoryItem + parent_field = 'device' form_class = forms.InventoryItemForm def alter_obj(self, obj, request, url_args, url_kwargs): @@ -1814,3 +1827,4 @@ class InventoryItemEditView(PermissionRequiredMixin, ComponentEditView): class InventoryItemDeleteView(PermissionRequiredMixin, ComponentDeleteView): permission_required = 'dcim.delete_inventoryitem' model = InventoryItem + parent_field = 'device' diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index d52763a77..3125c374e 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -775,12 +775,14 @@ class ComponentCreateView(View): class ComponentEditView(ObjectEditView): + parent_field = None def get_return_url(self, request, obj): - return obj.device.get_absolute_url() + return getattr(obj, self.parent_field).get_absolute_url() class ComponentDeleteView(ObjectDeleteView): + parent_field = None def get_return_url(self, request, obj): - return obj.device.get_absolute_url() \ No newline at end of file + return getattr(obj, self.parent_field).get_absolute_url() diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index a46a55cae..eca176a77 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -212,21 +212,17 @@ class VMInterfaceCreateView(PermissionRequiredMixin, ComponentCreateView): template_name = 'virtualization/virtualmachine_component_add.html' -class VMInterfaceEditView(PermissionRequiredMixin, ObjectEditView): +class VMInterfaceEditView(PermissionRequiredMixin, ComponentEditView): permission_required = 'virtualization.change_vminterface' model = VMInterface + parent_field = 'virtual_machine' form_class = forms.VMInterfaceForm - def get_return_url(self, request, obj): - return obj.virtual_machine.get_absolute_url() - -class VMInterfaceDeleteView(PermissionRequiredMixin, ObjectDeleteView): +class VMInterfaceDeleteView(PermissionRequiredMixin, ComponentDeleteView): permission_required = 'virtualization.delete_vminterface' model = VMInterface - - def get_return_url(self, request, obj): - return obj.virtual_machine.get_absolute_url() + parent_field = 'virtual_machine' class VMInterfaceBulkEditView(PermissionRequiredMixin, BulkEditView):