From 87fa6bc25202e1e47d4c02f66c785aad89d0fffe Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 11 May 2020 12:37:22 -0400 Subject: [PATCH 1/2] #4624: Refactor ObjectEditView to use a queryset --- netbox/circuits/views.py | 8 ++--- netbox/dcim/views.py | 62 +++++++++++++++++----------------- netbox/extras/views.py | 6 ++-- netbox/ipam/views.py | 18 +++++----- netbox/secrets/views.py | 2 +- netbox/tenancy/views.py | 4 +-- netbox/utilities/views.py | 19 ++++++----- netbox/virtualization/views.py | 10 +++--- 8 files changed, 65 insertions(+), 64 deletions(-) diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 709d2a726..7fe2501fb 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -62,7 +62,7 @@ class ProviderView(PermissionRequiredMixin, View): class ProviderCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'circuits.add_provider' - model = Provider + queryset = Provider.objects.all() model_form = forms.ProviderForm template_name = 'circuits/provider_edit.html' default_return_url = 'circuits:provider_list' @@ -114,7 +114,7 @@ class CircuitTypeListView(PermissionRequiredMixin, ObjectListView): class CircuitTypeCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'circuits.add_circuittype' - model = CircuitType + queryset = CircuitType.objects.all() model_form = forms.CircuitTypeForm default_return_url = 'circuits:circuittype_list' @@ -178,7 +178,7 @@ class CircuitView(PermissionRequiredMixin, View): class CircuitCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'circuits.add_circuit' - model = Circuit + queryset = Circuit.objects.all() model_form = forms.CircuitForm template_name = 'circuits/circuit_edit.html' default_return_url = 'circuits:circuit_list' @@ -273,7 +273,7 @@ def circuit_terminations_swap(request, pk): class CircuitTerminationCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'circuits.add_circuittermination' - model = CircuitTermination + queryset = CircuitTermination.objects.all() model_form = forms.CircuitTerminationForm template_name = 'circuits/circuittermination_edit.html' diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index cd1b4edf4..c9cc6ac13 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -157,7 +157,7 @@ class RegionListView(PermissionRequiredMixin, ObjectListView): class RegionCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_region' - model = Region + queryset = Region.objects.all() model_form = forms.RegionForm default_return_url = 'dcim:region_list' @@ -220,7 +220,7 @@ class SiteView(PermissionRequiredMixin, View): class SiteCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_site' - model = Site + queryset = Site.objects.all() model_form = forms.SiteForm template_name = 'dcim/site_edit.html' default_return_url = 'dcim:site_list' @@ -280,7 +280,7 @@ class RackGroupListView(PermissionRequiredMixin, ObjectListView): class RackGroupCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_rackgroup' - model = RackGroup + queryset = RackGroup.objects.all() model_form = forms.RackGroupForm default_return_url = 'dcim:rackgroup_list' @@ -316,7 +316,7 @@ class RackRoleListView(PermissionRequiredMixin, ObjectListView): class RackRoleCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_rackrole' - model = RackRole + queryset = RackRole.objects.all() model_form = forms.RackRoleForm default_return_url = 'dcim:rackrole_list' @@ -426,7 +426,7 @@ class RackView(PermissionRequiredMixin, View): class RackCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_rack' - model = Rack + queryset = Rack.objects.all() model_form = forms.RackForm template_name = 'dcim/rack_edit.html' default_return_url = 'dcim:rack_list' @@ -493,7 +493,7 @@ class RackReservationView(PermissionRequiredMixin, View): class RackReservationCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_rackreservation' - model = RackReservation + queryset = RackReservation.objects.all() model_form = forms.RackReservationForm template_name = 'dcim/rackreservation_edit.html' default_return_url = 'dcim:rackreservation_list' @@ -566,7 +566,7 @@ class ManufacturerListView(PermissionRequiredMixin, ObjectListView): class ManufacturerCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_manufacturer' - model = Manufacturer + queryset = Manufacturer.objects.all() model_form = forms.ManufacturerForm default_return_url = 'dcim:manufacturer_list' @@ -666,7 +666,7 @@ class DeviceTypeView(PermissionRequiredMixin, View): class DeviceTypeCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_devicetype' - model = DeviceType + queryset = DeviceType.objects.all() model_form = forms.DeviceTypeForm template_name = 'dcim/devicetype_edit.html' default_return_url = 'dcim:devicetype_list' @@ -740,7 +740,7 @@ class ConsolePortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView class ConsolePortTemplateEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_consoleporttemplate' - model = ConsolePortTemplate + queryset = ConsolePortTemplate.objects.all() model_form = forms.ConsolePortTemplateForm @@ -776,7 +776,7 @@ class ConsoleServerPortTemplateCreateView(PermissionRequiredMixin, ComponentCrea class ConsoleServerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_consoleserverporttemplate' - model = ConsoleServerPortTemplate + queryset = ConsoleServerPortTemplate.objects.all() model_form = forms.ConsoleServerPortTemplateForm @@ -812,7 +812,7 @@ class PowerPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView): class PowerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_powerporttemplate' - model = PowerPortTemplate + queryset = PowerPortTemplate.objects.all() model_form = forms.PowerPortTemplateForm @@ -848,7 +848,7 @@ class PowerOutletTemplateCreateView(PermissionRequiredMixin, ComponentCreateView class PowerOutletTemplateEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_poweroutlettemplate' - model = PowerOutletTemplate + queryset = PowerOutletTemplate.objects.all() model_form = forms.PowerOutletTemplateForm @@ -884,7 +884,7 @@ class InterfaceTemplateCreateView(PermissionRequiredMixin, ComponentCreateView): class InterfaceTemplateEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_interfacetemplate' - model = InterfaceTemplate + queryset = InterfaceTemplate.objects.all() model_form = forms.InterfaceTemplateForm @@ -920,7 +920,7 @@ class FrontPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView): class FrontPortTemplateEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_frontporttemplate' - model = FrontPortTemplate + queryset = FrontPortTemplate.objects.all() model_form = forms.FrontPortTemplateForm @@ -956,7 +956,7 @@ class RearPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView): class RearPortTemplateEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_rearporttemplate' - model = RearPortTemplate + queryset = RearPortTemplate.objects.all() model_form = forms.RearPortTemplateForm @@ -992,7 +992,7 @@ class DeviceBayTemplateCreateView(PermissionRequiredMixin, ComponentCreateView): class DeviceBayTemplateEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_devicebaytemplate' - model = DeviceBayTemplate + queryset = DeviceBayTemplate.objects.all() model_form = forms.DeviceBayTemplateForm @@ -1026,7 +1026,7 @@ class DeviceRoleListView(PermissionRequiredMixin, ObjectListView): class DeviceRoleCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_devicerole' - model = DeviceRole + queryset = DeviceRole.objects.all() model_form = forms.DeviceRoleForm default_return_url = 'dcim:devicerole_list' @@ -1061,7 +1061,7 @@ class PlatformListView(PermissionRequiredMixin, ObjectListView): class PlatformCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_platform' - model = Platform + queryset = Platform.objects.all() model_form = forms.PlatformForm default_return_url = 'dcim:platform_list' @@ -1247,7 +1247,7 @@ class DeviceConfigContextView(PermissionRequiredMixin, ObjectConfigContextView): class DeviceCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_device' - model = Device + queryset = Device.objects.all() model_form = forms.DeviceForm template_name = 'dcim/device_edit.html' default_return_url = 'dcim:device_list' @@ -1330,7 +1330,7 @@ class ConsolePortCreateView(PermissionRequiredMixin, ComponentCreateView): class ConsolePortEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_consoleport' - model = ConsolePort + queryset = ConsolePort.objects.all() model_form = forms.ConsolePortForm @@ -1385,7 +1385,7 @@ class ConsoleServerPortCreateView(PermissionRequiredMixin, ComponentCreateView): class ConsoleServerPortEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_consoleserverport' - model = ConsoleServerPort + queryset = ConsoleServerPort.objects.all() model_form = forms.ConsoleServerPortForm @@ -1452,7 +1452,7 @@ class PowerPortCreateView(PermissionRequiredMixin, ComponentCreateView): class PowerPortEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_powerport' - model = PowerPort + queryset = PowerPort.objects.all() model_form = forms.PowerPortForm @@ -1507,7 +1507,7 @@ class PowerOutletCreateView(PermissionRequiredMixin, ComponentCreateView): class PowerOutletEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_poweroutlet' - model = PowerOutlet + queryset = PowerOutlet.objects.all() model_form = forms.PowerOutletForm @@ -1610,7 +1610,7 @@ class InterfaceCreateView(PermissionRequiredMixin, ComponentCreateView): class InterfaceEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_interface' - model = Interface + queryset = Interface.objects.all() model_form = forms.InterfaceForm template_name = 'dcim/interface_edit.html' @@ -1678,7 +1678,7 @@ class FrontPortCreateView(PermissionRequiredMixin, ComponentCreateView): class FrontPortEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_frontport' - model = FrontPort + queryset = FrontPort.objects.all() model_form = forms.FrontPortForm @@ -1745,7 +1745,7 @@ class RearPortCreateView(PermissionRequiredMixin, ComponentCreateView): class RearPortEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_rearport' - model = RearPort + queryset = RearPort.objects.all() model_form = forms.RearPortForm @@ -1814,7 +1814,7 @@ class DeviceBayCreateView(PermissionRequiredMixin, ComponentCreateView): class DeviceBayEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_devicebay' - model = DeviceBay + queryset = DeviceBay.objects.all() model_form = forms.DeviceBayForm @@ -2154,7 +2154,7 @@ class CableCreateView(PermissionRequiredMixin, GetReturnURLMixin, View): class CableEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_cable' - model = Cable + queryset = Cable.objects.all() model_form = forms.CableForm template_name = 'dcim/cable_edit.html' default_return_url = 'dcim:cable_list' @@ -2309,7 +2309,7 @@ class InventoryItemListView(PermissionRequiredMixin, ObjectListView): class InventoryItemEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_inventoryitem' - model = InventoryItem + queryset = InventoryItem.objects.all() model_form = forms.InventoryItemForm @@ -2654,7 +2654,7 @@ class PowerPanelView(PermissionRequiredMixin, View): class PowerPanelCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_powerpanel' - model = PowerPanel + queryset = PowerPanel.objects.all() model_form = forms.PowerPanelForm default_return_url = 'dcim:powerpanel_list' @@ -2725,7 +2725,7 @@ class PowerFeedView(PermissionRequiredMixin, View): class PowerFeedCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.add_powerfeed' - model = PowerFeed + queryset = PowerFeed.objects.all() model_form = forms.PowerFeedForm template_name = 'dcim/powerfeed_edit.html' default_return_url = 'dcim:powerfeed_list' diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 613e45132..687ff69b0 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -67,7 +67,7 @@ class TagView(PermissionRequiredMixin, View): class TagEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'extras.change_tag' - model = Tag + queryset = Tag.objects.all() model_form = forms.TagForm default_return_url = 'extras:tag_list' template_name = 'extras/tag_edit.html' @@ -136,7 +136,7 @@ class ConfigContextView(PermissionRequiredMixin, View): class ConfigContextCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'extras.add_configcontext' - model = ConfigContext + queryset = ConfigContext.objects.all() model_form = forms.ConfigContextForm default_return_url = 'extras:configcontext_list' template_name = 'extras/configcontext_edit.html' @@ -306,7 +306,7 @@ class ObjectChangeLogView(View): class ImageAttachmentEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'extras.change_imageattachment' - model = ImageAttachment + queryset = ImageAttachment.objects.all() model_form = forms.ImageAttachmentForm def alter_obj(self, imageattachment, request, args, kwargs): diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index e8041e8dd..bf94a4f74 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -136,7 +136,7 @@ class VRFView(PermissionRequiredMixin, View): class VRFCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'ipam.add_vrf' - model = VRF + queryset = VRF.objects.all() model_form = forms.VRFForm template_name = 'ipam/vrf_edit.html' default_return_url = 'ipam:vrf_list' @@ -259,7 +259,7 @@ class RIRListView(PermissionRequiredMixin, ObjectListView): class RIRCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'ipam.add_rir' - model = RIR + queryset = RIR.objects.all() model_form = forms.RIRForm default_return_url = 'ipam:rir_list' @@ -361,7 +361,7 @@ class AggregateView(PermissionRequiredMixin, View): class AggregateCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'ipam.add_aggregate' - model = Aggregate + queryset = Aggregate.objects.all() model_form = forms.AggregateForm template_name = 'ipam/aggregate_edit.html' default_return_url = 'ipam:aggregate_list' @@ -413,7 +413,7 @@ class RoleListView(PermissionRequiredMixin, ObjectListView): class RoleCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'ipam.add_role' - model = Role + queryset = Role.objects.all() model_form = forms.RoleForm default_return_url = 'ipam:role_list' @@ -588,7 +588,7 @@ class PrefixIPAddressesView(PermissionRequiredMixin, View): class PrefixCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'ipam.add_prefix' - model = Prefix + queryset = Prefix.objects.all() model_form = forms.PrefixForm template_name = 'ipam/prefix_edit.html' default_return_url = 'ipam:prefix_list' @@ -699,7 +699,7 @@ class IPAddressView(PermissionRequiredMixin, View): class IPAddressCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'ipam.add_ipaddress' - model = IPAddress + queryset = IPAddress.objects.all() model_form = forms.IPAddressForm template_name = 'ipam/ipaddress_edit.html' default_return_url = 'ipam:ipaddress_list' @@ -817,7 +817,7 @@ class VLANGroupListView(PermissionRequiredMixin, ObjectListView): class VLANGroupCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'ipam.add_vlangroup' - model = VLANGroup + queryset = VLANGroup.objects.all() model_form = forms.VLANGroupForm default_return_url = 'ipam:vlangroup_list' @@ -933,7 +933,7 @@ class VLANMembersView(PermissionRequiredMixin, View): class VLANCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'ipam.add_vlan' - model = VLAN + queryset = VLAN.objects.all() model_form = forms.VLANForm template_name = 'ipam/vlan_edit.html' default_return_url = 'ipam:vlan_list' @@ -1000,7 +1000,7 @@ class ServiceView(PermissionRequiredMixin, View): class ServiceCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'ipam.add_service' - model = Service + queryset = Service.objects.all() model_form = forms.ServiceForm template_name = 'ipam/service_edit.html' diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py index ed59f4392..937b06edf 100644 --- a/netbox/secrets/views.py +++ b/netbox/secrets/views.py @@ -38,7 +38,7 @@ class SecretRoleListView(PermissionRequiredMixin, ObjectListView): class SecretRoleCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'secrets.add_secretrole' - model = SecretRole + queryset = SecretRole.objects.all() model_form = forms.SecretRoleForm default_return_url = 'secrets:secretrole_list' diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index afc363cd6..148ac6c17 100644 --- a/netbox/tenancy/views.py +++ b/netbox/tenancy/views.py @@ -32,7 +32,7 @@ class TenantGroupListView(PermissionRequiredMixin, ObjectListView): class TenantGroupCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'tenancy.add_tenantgroup' - model = TenantGroup + queryset = TenantGroup.objects.all() model_form = forms.TenantGroupForm default_return_url = 'tenancy:tenantgroup_list' @@ -95,7 +95,7 @@ class TenantView(PermissionRequiredMixin, View): class TenantCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'tenancy.add_tenant' - model = Tenant + queryset = Tenant.objects.all() model_form = forms.TenantForm template_name = 'tenancy/tenant_edit.html' default_return_url = 'tenancy:tenant_list' diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index 3064abe4e..cde38846e 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -216,21 +216,22 @@ class ObjectEditView(GetReturnURLMixin, View): """ Create or edit a single object. - model: The model of the object being edited + queryset: The base queryset for the model being modified model_form: The form used to create or edit the object template_name: The name of the template """ - model = None + queryset = None model_form = None template_name = 'utilities/obj_edit.html' def get_object(self, kwargs): - # Look up object by slug or PK. Return None if neither was provided. + # Look up an existing object by slug or PK, if provided. if 'slug' in kwargs: - return get_object_or_404(self.model, slug=kwargs['slug']) + return get_object_or_404(self.queryset, slug=kwargs['slug']) elif 'pk' in kwargs: - return get_object_or_404(self.model, pk=kwargs['pk']) - return self.model() + return get_object_or_404(self.queryset, pk=kwargs['pk']) + # Otherwise, return a new instance. + return self.queryset.model() def alter_obj(self, obj, request, url_args, url_kwargs): # Allow views to add extra info to an object before it is processed. For example, a parent object can be defined @@ -249,7 +250,7 @@ class ObjectEditView(GetReturnURLMixin, View): return render(request, self.template_name, { 'obj': self.obj, - 'obj_type': self.model._meta.verbose_name, + 'obj_type': self.queryset.model._meta.verbose_name, 'form': form, 'return_url': self.get_return_url(request, self.obj), }) @@ -264,7 +265,7 @@ class ObjectEditView(GetReturnURLMixin, View): obj = form.save() msg = '{} {}'.format( 'Created' if not form.instance.pk else 'Modified', - self.model._meta.verbose_name + self.queryset.model._meta.verbose_name ) logger.info(f"{msg} {obj} (PK: {obj.pk})") if hasattr(obj, 'get_absolute_url'): @@ -293,7 +294,7 @@ class ObjectEditView(GetReturnURLMixin, View): return render(request, self.template_name, { 'obj': self.obj, - 'obj_type': self.model._meta.verbose_name, + 'obj_type': self.queryset.model._meta.verbose_name, 'form': form, 'return_url': self.get_return_url(request, self.obj), }) diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 0a05833f4..0a6c418fe 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -30,7 +30,7 @@ class ClusterTypeListView(PermissionRequiredMixin, ObjectListView): class ClusterTypeCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'virtualization.add_clustertype' - model = ClusterType + queryset = ClusterType.objects.all() model_form = forms.ClusterTypeForm default_return_url = 'virtualization:clustertype_list' @@ -65,7 +65,7 @@ class ClusterGroupListView(PermissionRequiredMixin, ObjectListView): class ClusterGroupCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'virtualization.add_clustergroup' - model = ClusterGroup + queryset = ClusterGroup.objects.all() model_form = forms.ClusterGroupForm default_return_url = 'virtualization:clustergroup_list' @@ -122,7 +122,7 @@ class ClusterView(PermissionRequiredMixin, View): class ClusterCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'virtualization.add_cluster' template_name = 'virtualization/cluster_edit.html' - model = Cluster + queryset = Cluster.objects.all() model_form = forms.ClusterForm @@ -281,7 +281,7 @@ class VirtualMachineConfigContextView(PermissionRequiredMixin, ObjectConfigConte class VirtualMachineCreateView(PermissionRequiredMixin, ObjectEditView): permission_required = 'virtualization.add_virtualmachine' - model = VirtualMachine + queryset = VirtualMachine.objects.all() model_form = forms.VirtualMachineForm template_name = 'virtualization/virtualmachine_edit.html' default_return_url = 'virtualization:virtualmachine_list' @@ -335,7 +335,7 @@ class InterfaceCreateView(PermissionRequiredMixin, ComponentCreateView): class InterfaceEditView(PermissionRequiredMixin, ObjectEditView): permission_required = 'dcim.change_interface' - model = Interface + queryset = Interface.objects.all() model_form = forms.InterfaceForm template_name = 'virtualization/interface_edit.html' From 3abb52a0851adfc49341e655d7fb8a1d994f14fc Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 11 May 2020 12:47:01 -0400 Subject: [PATCH 2/2] #4624: Refactor ObjectDeleteView to use a queryset --- netbox/circuits/views.py | 6 ++-- netbox/dcim/views.py | 52 +++++++++++++++++----------------- netbox/extras/views.py | 6 ++-- netbox/ipam/views.py | 12 ++++---- netbox/secrets/views.py | 2 +- netbox/tenancy/views.py | 2 +- netbox/utilities/views.py | 16 +++++------ netbox/virtualization/views.py | 6 ++-- 8 files changed, 51 insertions(+), 51 deletions(-) diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 7fe2501fb..0546b3832 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -74,7 +74,7 @@ class ProviderEditView(ProviderCreateView): class ProviderDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'circuits.delete_provider' - model = Provider + queryset = Provider.objects.all() default_return_url = 'circuits:provider_list' @@ -190,7 +190,7 @@ class CircuitEditView(CircuitCreateView): class CircuitDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'circuits.delete_circuit' - model = Circuit + queryset = Circuit.objects.all() default_return_url = 'circuits:circuit_list' @@ -292,4 +292,4 @@ class CircuitTerminationEditView(CircuitTerminationCreateView): class CircuitTerminationDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'circuits.delete_circuittermination' - model = CircuitTermination + queryset = CircuitTermination.objects.all() diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index c9cc6ac13..1f20d79f2 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -232,7 +232,7 @@ class SiteEditView(SiteCreateView): class SiteDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_site' - model = Site + queryset = Site.objects.all() default_return_url = 'dcim:site_list' @@ -438,7 +438,7 @@ class RackEditView(RackCreateView): class RackDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_rack' - model = Rack + queryset = Rack.objects.all() default_return_url = 'dcim:rack_list' @@ -512,7 +512,7 @@ class RackReservationEditView(RackReservationCreateView): class RackReservationDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_rackreservation' - model = RackReservation + queryset = RackReservation.objects.all() default_return_url = 'dcim:rackreservation_list' @@ -678,7 +678,7 @@ class DeviceTypeEditView(DeviceTypeCreateView): class DeviceTypeDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_devicetype' - model = DeviceType + queryset = DeviceType.objects.all() default_return_url = 'dcim:devicetype_list' @@ -746,7 +746,7 @@ class ConsolePortTemplateEditView(PermissionRequiredMixin, ObjectEditView): class ConsolePortTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_consoleporttemplate' - model = ConsolePortTemplate + queryset = ConsolePortTemplate.objects.all() class ConsolePortTemplateBulkEditView(PermissionRequiredMixin, BulkEditView): @@ -782,7 +782,7 @@ class ConsoleServerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView) class ConsoleServerPortTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_consoleserverporttemplate' - model = ConsoleServerPortTemplate + queryset = ConsoleServerPortTemplate.objects.all() class ConsoleServerPortTemplateBulkEditView(PermissionRequiredMixin, BulkEditView): @@ -818,7 +818,7 @@ class PowerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView): class PowerPortTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_powerporttemplate' - model = PowerPortTemplate + queryset = PowerPortTemplate.objects.all() class PowerPortTemplateBulkEditView(PermissionRequiredMixin, BulkEditView): @@ -854,7 +854,7 @@ class PowerOutletTemplateEditView(PermissionRequiredMixin, ObjectEditView): class PowerOutletTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_poweroutlettemplate' - model = PowerOutletTemplate + queryset = PowerOutletTemplate.objects.all() class PowerOutletTemplateBulkEditView(PermissionRequiredMixin, BulkEditView): @@ -890,7 +890,7 @@ class InterfaceTemplateEditView(PermissionRequiredMixin, ObjectEditView): class InterfaceTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_interfacetemplate' - model = InterfaceTemplate + queryset = InterfaceTemplate.objects.all() class InterfaceTemplateBulkEditView(PermissionRequiredMixin, BulkEditView): @@ -926,7 +926,7 @@ class FrontPortTemplateEditView(PermissionRequiredMixin, ObjectEditView): class FrontPortTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_frontporttemplate' - model = FrontPortTemplate + queryset = FrontPortTemplate.objects.all() class FrontPortTemplateBulkEditView(PermissionRequiredMixin, BulkEditView): @@ -962,7 +962,7 @@ class RearPortTemplateEditView(PermissionRequiredMixin, ObjectEditView): class RearPortTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_rearporttemplate' - model = RearPortTemplate + queryset = RearPortTemplate.objects.all() class RearPortTemplateBulkEditView(PermissionRequiredMixin, BulkEditView): @@ -998,7 +998,7 @@ class DeviceBayTemplateEditView(PermissionRequiredMixin, ObjectEditView): class DeviceBayTemplateDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_devicebaytemplate' - model = DeviceBayTemplate + queryset = DeviceBayTemplate.objects.all() # class DeviceBayTemplateBulkEditView(PermissionRequiredMixin, BulkEditView): @@ -1259,7 +1259,7 @@ class DeviceEditView(DeviceCreateView): class DeviceDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_device' - model = Device + queryset = Device.objects.all() default_return_url = 'dcim:device_list' @@ -1336,7 +1336,7 @@ class ConsolePortEditView(PermissionRequiredMixin, ObjectEditView): class ConsolePortDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_consoleport' - model = ConsolePort + queryset = ConsolePort.objects.all() class ConsolePortBulkImportView(PermissionRequiredMixin, BulkImportView): @@ -1391,7 +1391,7 @@ class ConsoleServerPortEditView(PermissionRequiredMixin, ObjectEditView): class ConsoleServerPortDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_consoleserverport' - model = ConsoleServerPort + queryset = ConsoleServerPort.objects.all() class ConsoleServerPortBulkImportView(PermissionRequiredMixin, BulkImportView): @@ -1458,7 +1458,7 @@ class PowerPortEditView(PermissionRequiredMixin, ObjectEditView): class PowerPortDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_powerport' - model = PowerPort + queryset = PowerPort.objects.all() class PowerPortBulkImportView(PermissionRequiredMixin, BulkImportView): @@ -1513,7 +1513,7 @@ class PowerOutletEditView(PermissionRequiredMixin, ObjectEditView): class PowerOutletDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_poweroutlet' - model = PowerOutlet + queryset = PowerOutlet.objects.all() class PowerOutletBulkImportView(PermissionRequiredMixin, BulkImportView): @@ -1617,7 +1617,7 @@ class InterfaceEditView(PermissionRequiredMixin, ObjectEditView): class InterfaceDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_interface' - model = Interface + queryset = Interface.objects.all() class InterfaceBulkImportView(PermissionRequiredMixin, BulkImportView): @@ -1684,7 +1684,7 @@ class FrontPortEditView(PermissionRequiredMixin, ObjectEditView): class FrontPortDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_frontport' - model = FrontPort + queryset = FrontPort.objects.all() class FrontPortBulkImportView(PermissionRequiredMixin, BulkImportView): @@ -1751,7 +1751,7 @@ class RearPortEditView(PermissionRequiredMixin, ObjectEditView): class RearPortDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_rearport' - model = RearPort + queryset = RearPort.objects.all() class RearPortBulkImportView(PermissionRequiredMixin, BulkImportView): @@ -1820,7 +1820,7 @@ class DeviceBayEditView(PermissionRequiredMixin, ObjectEditView): class DeviceBayDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_devicebay' - model = DeviceBay + queryset = DeviceBay.objects.all() class DeviceBayPopulateView(PermissionRequiredMixin, View): @@ -2162,7 +2162,7 @@ class CableEditView(PermissionRequiredMixin, ObjectEditView): class CableDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_cable' - model = Cable + queryset = Cable.objects.all() default_return_url = 'dcim:cable_list' @@ -2323,7 +2323,7 @@ class InventoryItemCreateView(PermissionRequiredMixin, ComponentCreateView): class InventoryItemDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_inventoryitem' - model = InventoryItem + queryset = InventoryItem.objects.all() class InventoryItemBulkImportView(PermissionRequiredMixin, BulkImportView): @@ -2496,7 +2496,7 @@ class VirtualChassisEditView(PermissionRequiredMixin, GetReturnURLMixin, View): class VirtualChassisDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_virtualchassis' - model = VirtualChassis + queryset = VirtualChassis.objects.all() default_return_url = 'dcim:device_list' @@ -2665,7 +2665,7 @@ class PowerPanelEditView(PowerPanelCreateView): class PowerPanelDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_powerpanel' - model = PowerPanel + queryset = PowerPanel.objects.all() default_return_url = 'dcim:powerpanel_list' @@ -2737,7 +2737,7 @@ class PowerFeedEditView(PowerFeedCreateView): class PowerFeedDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_powerfeed' - model = PowerFeed + queryset = PowerFeed.objects.all() default_return_url = 'dcim:powerfeed_list' diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 687ff69b0..e466414b6 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -75,7 +75,7 @@ class TagEditView(PermissionRequiredMixin, ObjectEditView): class TagDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'extras.delete_tag' - model = Tag + queryset = Tag.objects.all() default_return_url = 'extras:tag_list' @@ -157,7 +157,7 @@ class ConfigContextBulkEditView(PermissionRequiredMixin, BulkEditView): class ConfigContextDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'extras.delete_configcontext' - model = ConfigContext + queryset = ConfigContext.objects.all() default_return_url = 'extras:configcontext_list' @@ -322,7 +322,7 @@ class ImageAttachmentEditView(PermissionRequiredMixin, ObjectEditView): class ImageAttachmentDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'extras.delete_imageattachment' - model = ImageAttachment + queryset = ImageAttachment.objects.all() def get_return_url(self, request, imageattachment): return imageattachment.parent.get_absolute_url() diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index bf94a4f74..92eb5b823 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -148,7 +148,7 @@ class VRFEditView(VRFCreateView): class VRFDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'ipam.delete_vrf' - model = VRF + queryset = VRF.objects.all() default_return_url = 'ipam:vrf_list' @@ -373,7 +373,7 @@ class AggregateEditView(AggregateCreateView): class AggregateDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'ipam.delete_aggregate' - model = Aggregate + queryset = Aggregate.objects.all() default_return_url = 'ipam:aggregate_list' @@ -600,7 +600,7 @@ class PrefixEditView(PrefixCreateView): class PrefixDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'ipam.delete_prefix' - model = Prefix + queryset = Prefix.objects.all() template_name = 'ipam/prefix_delete.html' default_return_url = 'ipam:prefix_list' @@ -766,7 +766,7 @@ class IPAddressAssignView(PermissionRequiredMixin, View): class IPAddressDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'ipam.delete_ipaddress' - model = IPAddress + queryset = IPAddress.objects.all() default_return_url = 'ipam:ipaddress_list' @@ -945,7 +945,7 @@ class VLANEditView(VLANCreateView): class VLANDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'ipam.delete_vlan' - model = VLAN + queryset = VLAN.objects.all() default_return_url = 'ipam:vlan_list' @@ -1028,7 +1028,7 @@ class ServiceEditView(ServiceCreateView): class ServiceDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'ipam.delete_service' - model = Service + queryset = Service.objects.all() class ServiceBulkEditView(PermissionRequiredMixin, BulkEditView): diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py index 937b06edf..b40e41cb3 100644 --- a/netbox/secrets/views.py +++ b/netbox/secrets/views.py @@ -191,7 +191,7 @@ def secret_edit(request, pk): class SecretDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'secrets.delete_secret' - model = Secret + queryset = Secret.objects.all() default_return_url = 'secrets:secret_list' diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index 148ac6c17..2af44094f 100644 --- a/netbox/tenancy/views.py +++ b/netbox/tenancy/views.py @@ -107,7 +107,7 @@ class TenantEditView(TenantCreateView): class TenantDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'tenancy.delete_tenant' - model = Tenant + queryset = Tenant.objects.all() default_return_url = 'tenancy:tenant_list' diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index cde38846e..076f2ad14 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -216,7 +216,7 @@ class ObjectEditView(GetReturnURLMixin, View): """ Create or edit a single object. - queryset: The base queryset for the model being modified + queryset: The base queryset for the object being modified model_form: The form used to create or edit the object template_name: The name of the template """ @@ -304,18 +304,18 @@ class ObjectDeleteView(GetReturnURLMixin, View): """ Delete a single object. - model: The model of the object being deleted + queryset: The base queryset for the object being deleted template_name: The name of the template """ - model = None + queryset = None template_name = 'utilities/obj_delete.html' def get_object(self, kwargs): # Look up object by slug if one has been provided. Otherwise, use PK. if 'slug' in kwargs: - return get_object_or_404(self.model, slug=kwargs['slug']) + return get_object_or_404(self.queryset, slug=kwargs['slug']) else: - return get_object_or_404(self.model, pk=kwargs['pk']) + return get_object_or_404(self.queryset, pk=kwargs['pk']) def get(self, request, **kwargs): obj = self.get_object(kwargs) @@ -324,7 +324,7 @@ class ObjectDeleteView(GetReturnURLMixin, View): return render(request, self.template_name, { 'obj': obj, 'form': form, - 'obj_type': self.model._meta.verbose_name, + 'obj_type': self.queryset.model._meta.verbose_name, 'return_url': self.get_return_url(request, obj), }) @@ -343,7 +343,7 @@ class ObjectDeleteView(GetReturnURLMixin, View): handle_protectederror(obj, request, e) return redirect(obj.get_absolute_url()) - msg = 'Deleted {} {}'.format(self.model._meta.verbose_name, obj) + msg = 'Deleted {} {}'.format(self.queryset.model._meta.verbose_name, obj) logger.info(msg) messages.success(request, msg) @@ -359,7 +359,7 @@ class ObjectDeleteView(GetReturnURLMixin, View): return render(request, self.template_name, { 'obj': obj, 'form': form, - 'obj_type': self.model._meta.verbose_name, + 'obj_type': self.queryset.model._meta.verbose_name, 'return_url': self.get_return_url(request, obj), }) diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 0a6c418fe..68a2443ae 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -132,7 +132,7 @@ class ClusterEditView(ClusterCreateView): class ClusterDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'virtualization.delete_cluster' - model = Cluster + queryset = Cluster.objects.all() default_return_url = 'virtualization:cluster_list' @@ -293,7 +293,7 @@ class VirtualMachineEditView(VirtualMachineCreateView): class VirtualMachineDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'virtualization.delete_virtualmachine' - model = VirtualMachine + queryset = VirtualMachine.objects.all() default_return_url = 'virtualization:virtualmachine_list' @@ -342,7 +342,7 @@ class InterfaceEditView(PermissionRequiredMixin, ObjectEditView): class InterfaceDeleteView(PermissionRequiredMixin, ObjectDeleteView): permission_required = 'dcim.delete_interface' - model = Interface + queryset = Interface.objects.all() class InterfaceBulkEditView(PermissionRequiredMixin, BulkEditView):