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

#4624: Refactor ObjectEditView to use a queryset

Jeremy Stretch 5 лет назад
Родитель
Сommit
87fa6bc252

+ 4 - 4
netbox/circuits/views.py

@@ -62,7 +62,7 @@ class ProviderView(PermissionRequiredMixin, View):
 
 
 class ProviderCreateView(PermissionRequiredMixin, ObjectEditView):
 class ProviderCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'circuits.add_provider'
     permission_required = 'circuits.add_provider'
-    model = Provider
+    queryset = Provider.objects.all()
     model_form = forms.ProviderForm
     model_form = forms.ProviderForm
     template_name = 'circuits/provider_edit.html'
     template_name = 'circuits/provider_edit.html'
     default_return_url = 'circuits:provider_list'
     default_return_url = 'circuits:provider_list'
@@ -114,7 +114,7 @@ class CircuitTypeListView(PermissionRequiredMixin, ObjectListView):
 
 
 class CircuitTypeCreateView(PermissionRequiredMixin, ObjectEditView):
 class CircuitTypeCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'circuits.add_circuittype'
     permission_required = 'circuits.add_circuittype'
-    model = CircuitType
+    queryset = CircuitType.objects.all()
     model_form = forms.CircuitTypeForm
     model_form = forms.CircuitTypeForm
     default_return_url = 'circuits:circuittype_list'
     default_return_url = 'circuits:circuittype_list'
 
 
@@ -178,7 +178,7 @@ class CircuitView(PermissionRequiredMixin, View):
 
 
 class CircuitCreateView(PermissionRequiredMixin, ObjectEditView):
 class CircuitCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'circuits.add_circuit'
     permission_required = 'circuits.add_circuit'
-    model = Circuit
+    queryset = Circuit.objects.all()
     model_form = forms.CircuitForm
     model_form = forms.CircuitForm
     template_name = 'circuits/circuit_edit.html'
     template_name = 'circuits/circuit_edit.html'
     default_return_url = 'circuits:circuit_list'
     default_return_url = 'circuits:circuit_list'
@@ -273,7 +273,7 @@ def circuit_terminations_swap(request, pk):
 
 
 class CircuitTerminationCreateView(PermissionRequiredMixin, ObjectEditView):
 class CircuitTerminationCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'circuits.add_circuittermination'
     permission_required = 'circuits.add_circuittermination'
-    model = CircuitTermination
+    queryset = CircuitTermination.objects.all()
     model_form = forms.CircuitTerminationForm
     model_form = forms.CircuitTerminationForm
     template_name = 'circuits/circuittermination_edit.html'
     template_name = 'circuits/circuittermination_edit.html'
 
 

+ 31 - 31
netbox/dcim/views.py

@@ -157,7 +157,7 @@ class RegionListView(PermissionRequiredMixin, ObjectListView):
 
 
 class RegionCreateView(PermissionRequiredMixin, ObjectEditView):
 class RegionCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_region'
     permission_required = 'dcim.add_region'
-    model = Region
+    queryset = Region.objects.all()
     model_form = forms.RegionForm
     model_form = forms.RegionForm
     default_return_url = 'dcim:region_list'
     default_return_url = 'dcim:region_list'
 
 
@@ -220,7 +220,7 @@ class SiteView(PermissionRequiredMixin, View):
 
 
 class SiteCreateView(PermissionRequiredMixin, ObjectEditView):
 class SiteCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_site'
     permission_required = 'dcim.add_site'
-    model = Site
+    queryset = Site.objects.all()
     model_form = forms.SiteForm
     model_form = forms.SiteForm
     template_name = 'dcim/site_edit.html'
     template_name = 'dcim/site_edit.html'
     default_return_url = 'dcim:site_list'
     default_return_url = 'dcim:site_list'
@@ -280,7 +280,7 @@ class RackGroupListView(PermissionRequiredMixin, ObjectListView):
 
 
 class RackGroupCreateView(PermissionRequiredMixin, ObjectEditView):
 class RackGroupCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_rackgroup'
     permission_required = 'dcim.add_rackgroup'
-    model = RackGroup
+    queryset = RackGroup.objects.all()
     model_form = forms.RackGroupForm
     model_form = forms.RackGroupForm
     default_return_url = 'dcim:rackgroup_list'
     default_return_url = 'dcim:rackgroup_list'
 
 
@@ -316,7 +316,7 @@ class RackRoleListView(PermissionRequiredMixin, ObjectListView):
 
 
 class RackRoleCreateView(PermissionRequiredMixin, ObjectEditView):
 class RackRoleCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_rackrole'
     permission_required = 'dcim.add_rackrole'
-    model = RackRole
+    queryset = RackRole.objects.all()
     model_form = forms.RackRoleForm
     model_form = forms.RackRoleForm
     default_return_url = 'dcim:rackrole_list'
     default_return_url = 'dcim:rackrole_list'
 
 
@@ -426,7 +426,7 @@ class RackView(PermissionRequiredMixin, View):
 
 
 class RackCreateView(PermissionRequiredMixin, ObjectEditView):
 class RackCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_rack'
     permission_required = 'dcim.add_rack'
-    model = Rack
+    queryset = Rack.objects.all()
     model_form = forms.RackForm
     model_form = forms.RackForm
     template_name = 'dcim/rack_edit.html'
     template_name = 'dcim/rack_edit.html'
     default_return_url = 'dcim:rack_list'
     default_return_url = 'dcim:rack_list'
@@ -493,7 +493,7 @@ class RackReservationView(PermissionRequiredMixin, View):
 
 
 class RackReservationCreateView(PermissionRequiredMixin, ObjectEditView):
 class RackReservationCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_rackreservation'
     permission_required = 'dcim.add_rackreservation'
-    model = RackReservation
+    queryset = RackReservation.objects.all()
     model_form = forms.RackReservationForm
     model_form = forms.RackReservationForm
     template_name = 'dcim/rackreservation_edit.html'
     template_name = 'dcim/rackreservation_edit.html'
     default_return_url = 'dcim:rackreservation_list'
     default_return_url = 'dcim:rackreservation_list'
@@ -566,7 +566,7 @@ class ManufacturerListView(PermissionRequiredMixin, ObjectListView):
 
 
 class ManufacturerCreateView(PermissionRequiredMixin, ObjectEditView):
 class ManufacturerCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_manufacturer'
     permission_required = 'dcim.add_manufacturer'
-    model = Manufacturer
+    queryset = Manufacturer.objects.all()
     model_form = forms.ManufacturerForm
     model_form = forms.ManufacturerForm
     default_return_url = 'dcim:manufacturer_list'
     default_return_url = 'dcim:manufacturer_list'
 
 
@@ -666,7 +666,7 @@ class DeviceTypeView(PermissionRequiredMixin, View):
 
 
 class DeviceTypeCreateView(PermissionRequiredMixin, ObjectEditView):
 class DeviceTypeCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_devicetype'
     permission_required = 'dcim.add_devicetype'
-    model = DeviceType
+    queryset = DeviceType.objects.all()
     model_form = forms.DeviceTypeForm
     model_form = forms.DeviceTypeForm
     template_name = 'dcim/devicetype_edit.html'
     template_name = 'dcim/devicetype_edit.html'
     default_return_url = 'dcim:devicetype_list'
     default_return_url = 'dcim:devicetype_list'
@@ -740,7 +740,7 @@ class ConsolePortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView
 
 
 class ConsolePortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
 class ConsolePortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_consoleporttemplate'
     permission_required = 'dcim.change_consoleporttemplate'
-    model = ConsolePortTemplate
+    queryset = ConsolePortTemplate.objects.all()
     model_form = forms.ConsolePortTemplateForm
     model_form = forms.ConsolePortTemplateForm
 
 
 
 
@@ -776,7 +776,7 @@ class ConsoleServerPortTemplateCreateView(PermissionRequiredMixin, ComponentCrea
 
 
 class ConsoleServerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
 class ConsoleServerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_consoleserverporttemplate'
     permission_required = 'dcim.change_consoleserverporttemplate'
-    model = ConsoleServerPortTemplate
+    queryset = ConsoleServerPortTemplate.objects.all()
     model_form = forms.ConsoleServerPortTemplateForm
     model_form = forms.ConsoleServerPortTemplateForm
 
 
 
 
@@ -812,7 +812,7 @@ class PowerPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class PowerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
 class PowerPortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_powerporttemplate'
     permission_required = 'dcim.change_powerporttemplate'
-    model = PowerPortTemplate
+    queryset = PowerPortTemplate.objects.all()
     model_form = forms.PowerPortTemplateForm
     model_form = forms.PowerPortTemplateForm
 
 
 
 
@@ -848,7 +848,7 @@ class PowerOutletTemplateCreateView(PermissionRequiredMixin, ComponentCreateView
 
 
 class PowerOutletTemplateEditView(PermissionRequiredMixin, ObjectEditView):
 class PowerOutletTemplateEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_poweroutlettemplate'
     permission_required = 'dcim.change_poweroutlettemplate'
-    model = PowerOutletTemplate
+    queryset = PowerOutletTemplate.objects.all()
     model_form = forms.PowerOutletTemplateForm
     model_form = forms.PowerOutletTemplateForm
 
 
 
 
@@ -884,7 +884,7 @@ class InterfaceTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class InterfaceTemplateEditView(PermissionRequiredMixin, ObjectEditView):
 class InterfaceTemplateEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_interfacetemplate'
     permission_required = 'dcim.change_interfacetemplate'
-    model = InterfaceTemplate
+    queryset = InterfaceTemplate.objects.all()
     model_form = forms.InterfaceTemplateForm
     model_form = forms.InterfaceTemplateForm
 
 
 
 
@@ -920,7 +920,7 @@ class FrontPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class FrontPortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
 class FrontPortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_frontporttemplate'
     permission_required = 'dcim.change_frontporttemplate'
-    model = FrontPortTemplate
+    queryset = FrontPortTemplate.objects.all()
     model_form = forms.FrontPortTemplateForm
     model_form = forms.FrontPortTemplateForm
 
 
 
 
@@ -956,7 +956,7 @@ class RearPortTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class RearPortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
 class RearPortTemplateEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_rearporttemplate'
     permission_required = 'dcim.change_rearporttemplate'
-    model = RearPortTemplate
+    queryset = RearPortTemplate.objects.all()
     model_form = forms.RearPortTemplateForm
     model_form = forms.RearPortTemplateForm
 
 
 
 
@@ -992,7 +992,7 @@ class DeviceBayTemplateCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class DeviceBayTemplateEditView(PermissionRequiredMixin, ObjectEditView):
 class DeviceBayTemplateEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_devicebaytemplate'
     permission_required = 'dcim.change_devicebaytemplate'
-    model = DeviceBayTemplate
+    queryset = DeviceBayTemplate.objects.all()
     model_form = forms.DeviceBayTemplateForm
     model_form = forms.DeviceBayTemplateForm
 
 
 
 
@@ -1026,7 +1026,7 @@ class DeviceRoleListView(PermissionRequiredMixin, ObjectListView):
 
 
 class DeviceRoleCreateView(PermissionRequiredMixin, ObjectEditView):
 class DeviceRoleCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_devicerole'
     permission_required = 'dcim.add_devicerole'
-    model = DeviceRole
+    queryset = DeviceRole.objects.all()
     model_form = forms.DeviceRoleForm
     model_form = forms.DeviceRoleForm
     default_return_url = 'dcim:devicerole_list'
     default_return_url = 'dcim:devicerole_list'
 
 
@@ -1061,7 +1061,7 @@ class PlatformListView(PermissionRequiredMixin, ObjectListView):
 
 
 class PlatformCreateView(PermissionRequiredMixin, ObjectEditView):
 class PlatformCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_platform'
     permission_required = 'dcim.add_platform'
-    model = Platform
+    queryset = Platform.objects.all()
     model_form = forms.PlatformForm
     model_form = forms.PlatformForm
     default_return_url = 'dcim:platform_list'
     default_return_url = 'dcim:platform_list'
 
 
@@ -1247,7 +1247,7 @@ class DeviceConfigContextView(PermissionRequiredMixin, ObjectConfigContextView):
 
 
 class DeviceCreateView(PermissionRequiredMixin, ObjectEditView):
 class DeviceCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_device'
     permission_required = 'dcim.add_device'
-    model = Device
+    queryset = Device.objects.all()
     model_form = forms.DeviceForm
     model_form = forms.DeviceForm
     template_name = 'dcim/device_edit.html'
     template_name = 'dcim/device_edit.html'
     default_return_url = 'dcim:device_list'
     default_return_url = 'dcim:device_list'
@@ -1330,7 +1330,7 @@ class ConsolePortCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class ConsolePortEditView(PermissionRequiredMixin, ObjectEditView):
 class ConsolePortEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_consoleport'
     permission_required = 'dcim.change_consoleport'
-    model = ConsolePort
+    queryset = ConsolePort.objects.all()
     model_form = forms.ConsolePortForm
     model_form = forms.ConsolePortForm
 
 
 
 
@@ -1385,7 +1385,7 @@ class ConsoleServerPortCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class ConsoleServerPortEditView(PermissionRequiredMixin, ObjectEditView):
 class ConsoleServerPortEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_consoleserverport'
     permission_required = 'dcim.change_consoleserverport'
-    model = ConsoleServerPort
+    queryset = ConsoleServerPort.objects.all()
     model_form = forms.ConsoleServerPortForm
     model_form = forms.ConsoleServerPortForm
 
 
 
 
@@ -1452,7 +1452,7 @@ class PowerPortCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class PowerPortEditView(PermissionRequiredMixin, ObjectEditView):
 class PowerPortEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_powerport'
     permission_required = 'dcim.change_powerport'
-    model = PowerPort
+    queryset = PowerPort.objects.all()
     model_form = forms.PowerPortForm
     model_form = forms.PowerPortForm
 
 
 
 
@@ -1507,7 +1507,7 @@ class PowerOutletCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class PowerOutletEditView(PermissionRequiredMixin, ObjectEditView):
 class PowerOutletEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_poweroutlet'
     permission_required = 'dcim.change_poweroutlet'
-    model = PowerOutlet
+    queryset = PowerOutlet.objects.all()
     model_form = forms.PowerOutletForm
     model_form = forms.PowerOutletForm
 
 
 
 
@@ -1610,7 +1610,7 @@ class InterfaceCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class InterfaceEditView(PermissionRequiredMixin, ObjectEditView):
 class InterfaceEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_interface'
     permission_required = 'dcim.change_interface'
-    model = Interface
+    queryset = Interface.objects.all()
     model_form = forms.InterfaceForm
     model_form = forms.InterfaceForm
     template_name = 'dcim/interface_edit.html'
     template_name = 'dcim/interface_edit.html'
 
 
@@ -1678,7 +1678,7 @@ class FrontPortCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class FrontPortEditView(PermissionRequiredMixin, ObjectEditView):
 class FrontPortEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_frontport'
     permission_required = 'dcim.change_frontport'
-    model = FrontPort
+    queryset = FrontPort.objects.all()
     model_form = forms.FrontPortForm
     model_form = forms.FrontPortForm
 
 
 
 
@@ -1745,7 +1745,7 @@ class RearPortCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class RearPortEditView(PermissionRequiredMixin, ObjectEditView):
 class RearPortEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_rearport'
     permission_required = 'dcim.change_rearport'
-    model = RearPort
+    queryset = RearPort.objects.all()
     model_form = forms.RearPortForm
     model_form = forms.RearPortForm
 
 
 
 
@@ -1814,7 +1814,7 @@ class DeviceBayCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class DeviceBayEditView(PermissionRequiredMixin, ObjectEditView):
 class DeviceBayEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_devicebay'
     permission_required = 'dcim.change_devicebay'
-    model = DeviceBay
+    queryset = DeviceBay.objects.all()
     model_form = forms.DeviceBayForm
     model_form = forms.DeviceBayForm
 
 
 
 
@@ -2154,7 +2154,7 @@ class CableCreateView(PermissionRequiredMixin, GetReturnURLMixin, View):
 
 
 class CableEditView(PermissionRequiredMixin, ObjectEditView):
 class CableEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_cable'
     permission_required = 'dcim.change_cable'
-    model = Cable
+    queryset = Cable.objects.all()
     model_form = forms.CableForm
     model_form = forms.CableForm
     template_name = 'dcim/cable_edit.html'
     template_name = 'dcim/cable_edit.html'
     default_return_url = 'dcim:cable_list'
     default_return_url = 'dcim:cable_list'
@@ -2309,7 +2309,7 @@ class InventoryItemListView(PermissionRequiredMixin, ObjectListView):
 
 
 class InventoryItemEditView(PermissionRequiredMixin, ObjectEditView):
 class InventoryItemEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_inventoryitem'
     permission_required = 'dcim.change_inventoryitem'
-    model = InventoryItem
+    queryset = InventoryItem.objects.all()
     model_form = forms.InventoryItemForm
     model_form = forms.InventoryItemForm
 
 
 
 
@@ -2654,7 +2654,7 @@ class PowerPanelView(PermissionRequiredMixin, View):
 
 
 class PowerPanelCreateView(PermissionRequiredMixin, ObjectEditView):
 class PowerPanelCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_powerpanel'
     permission_required = 'dcim.add_powerpanel'
-    model = PowerPanel
+    queryset = PowerPanel.objects.all()
     model_form = forms.PowerPanelForm
     model_form = forms.PowerPanelForm
     default_return_url = 'dcim:powerpanel_list'
     default_return_url = 'dcim:powerpanel_list'
 
 
@@ -2725,7 +2725,7 @@ class PowerFeedView(PermissionRequiredMixin, View):
 
 
 class PowerFeedCreateView(PermissionRequiredMixin, ObjectEditView):
 class PowerFeedCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.add_powerfeed'
     permission_required = 'dcim.add_powerfeed'
-    model = PowerFeed
+    queryset = PowerFeed.objects.all()
     model_form = forms.PowerFeedForm
     model_form = forms.PowerFeedForm
     template_name = 'dcim/powerfeed_edit.html'
     template_name = 'dcim/powerfeed_edit.html'
     default_return_url = 'dcim:powerfeed_list'
     default_return_url = 'dcim:powerfeed_list'

+ 3 - 3
netbox/extras/views.py

@@ -67,7 +67,7 @@ class TagView(PermissionRequiredMixin, View):
 
 
 class TagEditView(PermissionRequiredMixin, ObjectEditView):
 class TagEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'extras.change_tag'
     permission_required = 'extras.change_tag'
-    model = Tag
+    queryset = Tag.objects.all()
     model_form = forms.TagForm
     model_form = forms.TagForm
     default_return_url = 'extras:tag_list'
     default_return_url = 'extras:tag_list'
     template_name = 'extras/tag_edit.html'
     template_name = 'extras/tag_edit.html'
@@ -136,7 +136,7 @@ class ConfigContextView(PermissionRequiredMixin, View):
 
 
 class ConfigContextCreateView(PermissionRequiredMixin, ObjectEditView):
 class ConfigContextCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'extras.add_configcontext'
     permission_required = 'extras.add_configcontext'
-    model = ConfigContext
+    queryset = ConfigContext.objects.all()
     model_form = forms.ConfigContextForm
     model_form = forms.ConfigContextForm
     default_return_url = 'extras:configcontext_list'
     default_return_url = 'extras:configcontext_list'
     template_name = 'extras/configcontext_edit.html'
     template_name = 'extras/configcontext_edit.html'
@@ -306,7 +306,7 @@ class ObjectChangeLogView(View):
 
 
 class ImageAttachmentEditView(PermissionRequiredMixin, ObjectEditView):
 class ImageAttachmentEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'extras.change_imageattachment'
     permission_required = 'extras.change_imageattachment'
-    model = ImageAttachment
+    queryset = ImageAttachment.objects.all()
     model_form = forms.ImageAttachmentForm
     model_form = forms.ImageAttachmentForm
 
 
     def alter_obj(self, imageattachment, request, args, kwargs):
     def alter_obj(self, imageattachment, request, args, kwargs):

+ 9 - 9
netbox/ipam/views.py

@@ -136,7 +136,7 @@ class VRFView(PermissionRequiredMixin, View):
 
 
 class VRFCreateView(PermissionRequiredMixin, ObjectEditView):
 class VRFCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.add_vrf'
     permission_required = 'ipam.add_vrf'
-    model = VRF
+    queryset = VRF.objects.all()
     model_form = forms.VRFForm
     model_form = forms.VRFForm
     template_name = 'ipam/vrf_edit.html'
     template_name = 'ipam/vrf_edit.html'
     default_return_url = 'ipam:vrf_list'
     default_return_url = 'ipam:vrf_list'
@@ -259,7 +259,7 @@ class RIRListView(PermissionRequiredMixin, ObjectListView):
 
 
 class RIRCreateView(PermissionRequiredMixin, ObjectEditView):
 class RIRCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.add_rir'
     permission_required = 'ipam.add_rir'
-    model = RIR
+    queryset = RIR.objects.all()
     model_form = forms.RIRForm
     model_form = forms.RIRForm
     default_return_url = 'ipam:rir_list'
     default_return_url = 'ipam:rir_list'
 
 
@@ -361,7 +361,7 @@ class AggregateView(PermissionRequiredMixin, View):
 
 
 class AggregateCreateView(PermissionRequiredMixin, ObjectEditView):
 class AggregateCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.add_aggregate'
     permission_required = 'ipam.add_aggregate'
-    model = Aggregate
+    queryset = Aggregate.objects.all()
     model_form = forms.AggregateForm
     model_form = forms.AggregateForm
     template_name = 'ipam/aggregate_edit.html'
     template_name = 'ipam/aggregate_edit.html'
     default_return_url = 'ipam:aggregate_list'
     default_return_url = 'ipam:aggregate_list'
@@ -413,7 +413,7 @@ class RoleListView(PermissionRequiredMixin, ObjectListView):
 
 
 class RoleCreateView(PermissionRequiredMixin, ObjectEditView):
 class RoleCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.add_role'
     permission_required = 'ipam.add_role'
-    model = Role
+    queryset = Role.objects.all()
     model_form = forms.RoleForm
     model_form = forms.RoleForm
     default_return_url = 'ipam:role_list'
     default_return_url = 'ipam:role_list'
 
 
@@ -588,7 +588,7 @@ class PrefixIPAddressesView(PermissionRequiredMixin, View):
 
 
 class PrefixCreateView(PermissionRequiredMixin, ObjectEditView):
 class PrefixCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.add_prefix'
     permission_required = 'ipam.add_prefix'
-    model = Prefix
+    queryset = Prefix.objects.all()
     model_form = forms.PrefixForm
     model_form = forms.PrefixForm
     template_name = 'ipam/prefix_edit.html'
     template_name = 'ipam/prefix_edit.html'
     default_return_url = 'ipam:prefix_list'
     default_return_url = 'ipam:prefix_list'
@@ -699,7 +699,7 @@ class IPAddressView(PermissionRequiredMixin, View):
 
 
 class IPAddressCreateView(PermissionRequiredMixin, ObjectEditView):
 class IPAddressCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.add_ipaddress'
     permission_required = 'ipam.add_ipaddress'
-    model = IPAddress
+    queryset = IPAddress.objects.all()
     model_form = forms.IPAddressForm
     model_form = forms.IPAddressForm
     template_name = 'ipam/ipaddress_edit.html'
     template_name = 'ipam/ipaddress_edit.html'
     default_return_url = 'ipam:ipaddress_list'
     default_return_url = 'ipam:ipaddress_list'
@@ -817,7 +817,7 @@ class VLANGroupListView(PermissionRequiredMixin, ObjectListView):
 
 
 class VLANGroupCreateView(PermissionRequiredMixin, ObjectEditView):
 class VLANGroupCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.add_vlangroup'
     permission_required = 'ipam.add_vlangroup'
-    model = VLANGroup
+    queryset = VLANGroup.objects.all()
     model_form = forms.VLANGroupForm
     model_form = forms.VLANGroupForm
     default_return_url = 'ipam:vlangroup_list'
     default_return_url = 'ipam:vlangroup_list'
 
 
@@ -933,7 +933,7 @@ class VLANMembersView(PermissionRequiredMixin, View):
 
 
 class VLANCreateView(PermissionRequiredMixin, ObjectEditView):
 class VLANCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.add_vlan'
     permission_required = 'ipam.add_vlan'
-    model = VLAN
+    queryset = VLAN.objects.all()
     model_form = forms.VLANForm
     model_form = forms.VLANForm
     template_name = 'ipam/vlan_edit.html'
     template_name = 'ipam/vlan_edit.html'
     default_return_url = 'ipam:vlan_list'
     default_return_url = 'ipam:vlan_list'
@@ -1000,7 +1000,7 @@ class ServiceView(PermissionRequiredMixin, View):
 
 
 class ServiceCreateView(PermissionRequiredMixin, ObjectEditView):
 class ServiceCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'ipam.add_service'
     permission_required = 'ipam.add_service'
-    model = Service
+    queryset = Service.objects.all()
     model_form = forms.ServiceForm
     model_form = forms.ServiceForm
     template_name = 'ipam/service_edit.html'
     template_name = 'ipam/service_edit.html'
 
 

+ 1 - 1
netbox/secrets/views.py

@@ -38,7 +38,7 @@ class SecretRoleListView(PermissionRequiredMixin, ObjectListView):
 
 
 class SecretRoleCreateView(PermissionRequiredMixin, ObjectEditView):
 class SecretRoleCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'secrets.add_secretrole'
     permission_required = 'secrets.add_secretrole'
-    model = SecretRole
+    queryset = SecretRole.objects.all()
     model_form = forms.SecretRoleForm
     model_form = forms.SecretRoleForm
     default_return_url = 'secrets:secretrole_list'
     default_return_url = 'secrets:secretrole_list'
 
 

+ 2 - 2
netbox/tenancy/views.py

@@ -32,7 +32,7 @@ class TenantGroupListView(PermissionRequiredMixin, ObjectListView):
 
 
 class TenantGroupCreateView(PermissionRequiredMixin, ObjectEditView):
 class TenantGroupCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'tenancy.add_tenantgroup'
     permission_required = 'tenancy.add_tenantgroup'
-    model = TenantGroup
+    queryset = TenantGroup.objects.all()
     model_form = forms.TenantGroupForm
     model_form = forms.TenantGroupForm
     default_return_url = 'tenancy:tenantgroup_list'
     default_return_url = 'tenancy:tenantgroup_list'
 
 
@@ -95,7 +95,7 @@ class TenantView(PermissionRequiredMixin, View):
 
 
 class TenantCreateView(PermissionRequiredMixin, ObjectEditView):
 class TenantCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'tenancy.add_tenant'
     permission_required = 'tenancy.add_tenant'
-    model = Tenant
+    queryset = Tenant.objects.all()
     model_form = forms.TenantForm
     model_form = forms.TenantForm
     template_name = 'tenancy/tenant_edit.html'
     template_name = 'tenancy/tenant_edit.html'
     default_return_url = 'tenancy:tenant_list'
     default_return_url = 'tenancy:tenant_list'

+ 10 - 9
netbox/utilities/views.py

@@ -216,21 +216,22 @@ class ObjectEditView(GetReturnURLMixin, View):
     """
     """
     Create or edit a single object.
     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
     model_form: The form used to create or edit the object
     template_name: The name of the template
     template_name: The name of the template
     """
     """
-    model = None
+    queryset = None
     model_form = None
     model_form = None
     template_name = 'utilities/obj_edit.html'
     template_name = 'utilities/obj_edit.html'
 
 
     def get_object(self, kwargs):
     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:
         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:
         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):
     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
         # 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, {
         return render(request, self.template_name, {
             'obj': self.obj,
             'obj': self.obj,
-            'obj_type': self.model._meta.verbose_name,
+            'obj_type': self.queryset.model._meta.verbose_name,
             'form': form,
             'form': form,
             'return_url': self.get_return_url(request, self.obj),
             'return_url': self.get_return_url(request, self.obj),
         })
         })
@@ -264,7 +265,7 @@ class ObjectEditView(GetReturnURLMixin, View):
             obj = form.save()
             obj = form.save()
             msg = '{} {}'.format(
             msg = '{} {}'.format(
                 'Created' if not form.instance.pk else 'Modified',
                 '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})")
             logger.info(f"{msg} {obj} (PK: {obj.pk})")
             if hasattr(obj, 'get_absolute_url'):
             if hasattr(obj, 'get_absolute_url'):
@@ -293,7 +294,7 @@ class ObjectEditView(GetReturnURLMixin, View):
 
 
         return render(request, self.template_name, {
         return render(request, self.template_name, {
             'obj': self.obj,
             'obj': self.obj,
-            'obj_type': self.model._meta.verbose_name,
+            'obj_type': self.queryset.model._meta.verbose_name,
             'form': form,
             'form': form,
             'return_url': self.get_return_url(request, self.obj),
             'return_url': self.get_return_url(request, self.obj),
         })
         })

+ 5 - 5
netbox/virtualization/views.py

@@ -30,7 +30,7 @@ class ClusterTypeListView(PermissionRequiredMixin, ObjectListView):
 
 
 class ClusterTypeCreateView(PermissionRequiredMixin, ObjectEditView):
 class ClusterTypeCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'virtualization.add_clustertype'
     permission_required = 'virtualization.add_clustertype'
-    model = ClusterType
+    queryset = ClusterType.objects.all()
     model_form = forms.ClusterTypeForm
     model_form = forms.ClusterTypeForm
     default_return_url = 'virtualization:clustertype_list'
     default_return_url = 'virtualization:clustertype_list'
 
 
@@ -65,7 +65,7 @@ class ClusterGroupListView(PermissionRequiredMixin, ObjectListView):
 
 
 class ClusterGroupCreateView(PermissionRequiredMixin, ObjectEditView):
 class ClusterGroupCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'virtualization.add_clustergroup'
     permission_required = 'virtualization.add_clustergroup'
-    model = ClusterGroup
+    queryset = ClusterGroup.objects.all()
     model_form = forms.ClusterGroupForm
     model_form = forms.ClusterGroupForm
     default_return_url = 'virtualization:clustergroup_list'
     default_return_url = 'virtualization:clustergroup_list'
 
 
@@ -122,7 +122,7 @@ class ClusterView(PermissionRequiredMixin, View):
 class ClusterCreateView(PermissionRequiredMixin, ObjectEditView):
 class ClusterCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'virtualization.add_cluster'
     permission_required = 'virtualization.add_cluster'
     template_name = 'virtualization/cluster_edit.html'
     template_name = 'virtualization/cluster_edit.html'
-    model = Cluster
+    queryset = Cluster.objects.all()
     model_form = forms.ClusterForm
     model_form = forms.ClusterForm
 
 
 
 
@@ -281,7 +281,7 @@ class VirtualMachineConfigContextView(PermissionRequiredMixin, ObjectConfigConte
 
 
 class VirtualMachineCreateView(PermissionRequiredMixin, ObjectEditView):
 class VirtualMachineCreateView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'virtualization.add_virtualmachine'
     permission_required = 'virtualization.add_virtualmachine'
-    model = VirtualMachine
+    queryset = VirtualMachine.objects.all()
     model_form = forms.VirtualMachineForm
     model_form = forms.VirtualMachineForm
     template_name = 'virtualization/virtualmachine_edit.html'
     template_name = 'virtualization/virtualmachine_edit.html'
     default_return_url = 'virtualization:virtualmachine_list'
     default_return_url = 'virtualization:virtualmachine_list'
@@ -335,7 +335,7 @@ class InterfaceCreateView(PermissionRequiredMixin, ComponentCreateView):
 
 
 class InterfaceEditView(PermissionRequiredMixin, ObjectEditView):
 class InterfaceEditView(PermissionRequiredMixin, ObjectEditView):
     permission_required = 'dcim.change_interface'
     permission_required = 'dcim.change_interface'
-    model = Interface
+    queryset = Interface.objects.all()
     model_form = forms.InterfaceForm
     model_form = forms.InterfaceForm
     template_name = 'virtualization/interface_edit.html'
     template_name = 'virtualization/interface_edit.html'