diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index fd62b0887..0abe35b8d 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -124,7 +124,7 @@ class CircuitListView(ObjectListView): class CircuitView(ObjectView): - queryset = Circuit.objects.prefetch_related('provider', 'type', 'tenant__group') + queryset = Circuit.objects.all() def get(self, request, pk): circuit = get_object_or_404(self.queryset, pk=pk) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index b48d6f8c1..a5c3ee0e1 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -147,7 +147,7 @@ class RegionBulkDeleteView(BulkDeleteView): # class SiteListView(ObjectListView): - queryset = Site.objects.prefetch_related('region', 'tenant') + queryset = Site.objects.all() filterset = filters.SiteFilterSet filterset_form = forms.SiteFilterForm table = tables.SiteTable @@ -222,7 +222,7 @@ class RackGroupListView(ObjectListView): 'group', 'rack_count', cumulative=True - ).prefetch_related('site') + ) filterset = filters.RackGroupFilterSet filterset_form = forms.RackGroupFilterForm table = tables.RackGroupTable @@ -289,9 +289,7 @@ class RackRoleBulkDeleteView(BulkDeleteView): # class RackListView(ObjectListView): - queryset = Rack.objects.prefetch_related( - 'site', 'group', 'tenant', 'role', 'devices__device_type' - ).annotate( + queryset = Rack.objects.annotate( device_count=Count('devices') ).order_by(*Rack._meta.ordering) filterset = filters.RackFilterSet @@ -410,7 +408,7 @@ class RackBulkDeleteView(BulkDeleteView): # class RackReservationListView(ObjectListView): - queryset = RackReservation.objects.prefetch_related('rack__site') + queryset = RackReservation.objects.all() filterset = filters.RackReservationFilterSet filterset_form = forms.RackReservationFilterForm table = tables.RackReservationTable @@ -514,7 +512,7 @@ class ManufacturerBulkDeleteView(BulkDeleteView): # class DeviceTypeListView(ObjectListView): - queryset = DeviceType.objects.prefetch_related('manufacturer').annotate( + queryset = DeviceType.objects.annotate( instance_count=Count('instances') ).order_by(*DeviceType._meta.ordering) filterset = filters.DeviceTypeFilterSet @@ -989,9 +987,7 @@ class PlatformBulkDeleteView(BulkDeleteView): # class DeviceListView(ObjectListView): - queryset = Device.objects.prefetch_related( - 'device_type__manufacturer', 'device_role', 'tenant', 'site', 'rack', 'primary_ip4', 'primary_ip6' - ) + queryset = Device.objects.all() filterset = filters.DeviceFilterSet filterset_form = forms.DeviceFilterForm table = tables.DeviceTable @@ -1263,7 +1259,7 @@ class DeviceBulkDeleteView(BulkDeleteView): # class ConsolePortListView(ObjectListView): - queryset = ConsolePort.objects.prefetch_related('device', 'cable') + queryset = ConsolePort.objects.all() filterset = filters.ConsolePortFilterSet filterset_form = forms.ConsolePortFilterForm table = tables.ConsolePortTable @@ -1323,7 +1319,7 @@ class ConsolePortBulkDeleteView(BulkDeleteView): # class ConsoleServerPortListView(ObjectListView): - queryset = ConsoleServerPort.objects.prefetch_related('device', 'cable') + queryset = ConsoleServerPort.objects.all() filterset = filters.ConsoleServerPortFilterSet filterset_form = forms.ConsoleServerPortFilterForm table = tables.ConsoleServerPortTable @@ -1383,7 +1379,7 @@ class ConsoleServerPortBulkDeleteView(BulkDeleteView): # class PowerPortListView(ObjectListView): - queryset = PowerPort.objects.prefetch_related('device', 'cable') + queryset = PowerPort.objects.all() filterset = filters.PowerPortFilterSet filterset_form = forms.PowerPortFilterForm table = tables.PowerPortTable @@ -1443,7 +1439,7 @@ class PowerPortBulkDeleteView(BulkDeleteView): # class PowerOutletListView(ObjectListView): - queryset = PowerOutlet.objects.prefetch_related('device', 'cable') + queryset = PowerOutlet.objects.all() filterset = filters.PowerOutletFilterSet filterset_form = forms.PowerOutletFilterForm table = tables.PowerOutletTable @@ -1503,7 +1499,7 @@ class PowerOutletBulkDeleteView(BulkDeleteView): # class InterfaceListView(ObjectListView): - queryset = Interface.objects.prefetch_related('device', 'cable') + queryset = Interface.objects.all() filterset = filters.InterfaceFilterSet filterset_form = forms.InterfaceFilterForm table = tables.InterfaceTable @@ -1593,7 +1589,7 @@ class InterfaceBulkDeleteView(BulkDeleteView): # class FrontPortListView(ObjectListView): - queryset = FrontPort.objects.prefetch_related('device', 'cable') + queryset = FrontPort.objects.all() filterset = filters.FrontPortFilterSet filterset_form = forms.FrontPortFilterForm table = tables.FrontPortTable @@ -1653,7 +1649,7 @@ class FrontPortBulkDeleteView(BulkDeleteView): # class RearPortListView(ObjectListView): - queryset = RearPort.objects.prefetch_related('device', 'cable') + queryset = RearPort.objects.all() filterset = filters.RearPortFilterSet filterset_form = forms.RearPortFilterForm table = tables.RearPortTable @@ -1713,7 +1709,7 @@ class RearPortBulkDeleteView(BulkDeleteView): # class DeviceBayListView(ObjectListView): - queryset = DeviceBay.objects.prefetch_related('device', 'installed_device') + queryset = DeviceBay.objects.all() filterset = filters.DeviceBayFilterSet filterset_form = forms.DeviceBayFilterForm table = tables.DeviceBayTable @@ -1836,7 +1832,7 @@ class DeviceBayBulkDeleteView(BulkDeleteView): # class InventoryItemListView(ObjectListView): - queryset = InventoryItem.objects.prefetch_related('device', 'manufacturer') + queryset = InventoryItem.objects.all() filterset = filters.InventoryItemFilterSet filterset_form = forms.InventoryItemFilterForm table = tables.InventoryItemTable @@ -1994,9 +1990,7 @@ class DeviceBulkAddInventoryItemView(BulkComponentCreateView): # class CableListView(ObjectListView): - queryset = Cable.objects.prefetch_related( - 'termination_a', 'termination_b' - ) + queryset = Cable.objects.all() filterset = filters.CableFilterSet filterset_form = forms.CableFilterForm table = tables.CableTable @@ -2145,9 +2139,7 @@ class CableBulkDeleteView(BulkDeleteView): # class ConsoleConnectionsListView(ObjectListView): - queryset = ConsolePort.objects.prefetch_related( - 'device', '_path__destination' - ).filter(_path__isnull=False).order_by('device') + queryset = ConsolePort.objects.filter(_path__isnull=False).order_by('device') filterset = filters.ConsoleConnectionFilterSet filterset_form = forms.ConsoleConnectionFilterForm table = tables.ConsoleConnectionTable @@ -2172,9 +2164,7 @@ class ConsoleConnectionsListView(ObjectListView): class PowerConnectionsListView(ObjectListView): - queryset = PowerPort.objects.prefetch_related( - 'device', '_path__destination' - ).filter(_path__isnull=False).order_by('device') + queryset = PowerPort.objects.filter(_path__isnull=False).order_by('device') filterset = filters.PowerConnectionFilterSet filterset_form = forms.PowerConnectionFilterForm table = tables.PowerConnectionTable @@ -2199,9 +2189,7 @@ class PowerConnectionsListView(ObjectListView): class InterfaceConnectionsListView(ObjectListView): - queryset = Interface.objects.prefetch_related( - 'device', '_path__destination' - ).filter( + queryset = Interface.objects.filter( # Avoid duplicate connections by only selecting the lower PK in a connected pair _path__isnull=False, pk__lt=F('_path__destination_id') @@ -2236,7 +2224,7 @@ class InterfaceConnectionsListView(ObjectListView): # class VirtualChassisListView(ObjectListView): - queryset = VirtualChassis.objects.prefetch_related('master').annotate( + queryset = VirtualChassis.objects.annotate( member_count=Count('members', distinct=True) ).order_by(*VirtualChassis._meta.ordering) table = tables.VirtualChassisTable @@ -2466,9 +2454,7 @@ class VirtualChassisBulkDeleteView(BulkDeleteView): # class PowerPanelListView(ObjectListView): - queryset = PowerPanel.objects.prefetch_related( - 'site', 'rack_group' - ).annotate( + queryset = PowerPanel.objects.annotate( powerfeed_count=Count('powerfeeds') ).order_by(*PowerPanel._meta.ordering) filterset = filters.PowerPanelFilterSet @@ -2532,9 +2518,7 @@ class PowerPanelBulkDeleteView(BulkDeleteView): # class PowerFeedListView(ObjectListView): - queryset = PowerFeed.objects.prefetch_related( - 'power_panel', 'rack' - ) + queryset = PowerFeed.objects.all() filterset = filters.PowerFeedFilterSet filterset_form = forms.PowerFeedFilterForm table = tables.PowerFeedTable diff --git a/netbox/extras/views.py b/netbox/extras/views.py index f2c31652c..8d09e0610 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -173,7 +173,7 @@ class ObjectConfigContextView(ObjectView): # class ObjectChangeListView(ObjectListView): - queryset = ObjectChange.objects.prefetch_related('user', 'changed_object_type') + queryset = ObjectChange.objects.all() filterset = filters.ObjectChangeFilterSet filterset_form = forms.ObjectChangeFilterForm table = tables.ObjectChangeTable diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index ca16ec947..8fef56edf 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -25,7 +25,7 @@ from .utils import add_available_ipaddresses, add_available_prefixes, add_availa # class VRFListView(ObjectListView): - queryset = VRF.objects.prefetch_related('tenant') + queryset = VRF.objects.all() filterset = filters.VRFFilterSet filterset_form = forms.VRFFilterForm table = tables.VRFTable @@ -90,7 +90,7 @@ class VRFBulkDeleteView(BulkDeleteView): # class RouteTargetListView(ObjectListView): - queryset = RouteTarget.objects.prefetch_related('tenant') + queryset = RouteTarget.objects.all() filterset = filters.RouteTargetFilterSet filterset_form = forms.RouteTargetFilterForm table = tables.RouteTargetTable @@ -184,7 +184,7 @@ class RIRBulkDeleteView(BulkDeleteView): # class AggregateListView(ObjectListView): - queryset = Aggregate.objects.prefetch_related('rir').annotate( + queryset = Aggregate.objects.annotate( child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ()) ).order_by(*Aggregate._meta.ordering) filterset = filters.AggregateFilterSet @@ -320,7 +320,7 @@ class RoleBulkDeleteView(BulkDeleteView): # class PrefixListView(ObjectListView): - queryset = Prefix.objects.prefetch_related('site', 'vrf__tenant', 'tenant', 'vlan', 'role').annotate_tree() + queryset = Prefix.objects.annotate_tree() filterset = filters.PrefixFilterSet filterset_form = forms.PrefixFilterForm table = tables.PrefixDetailTable @@ -494,9 +494,7 @@ class PrefixBulkDeleteView(BulkDeleteView): # class IPAddressListView(ObjectListView): - queryset = IPAddress.objects.prefetch_related( - 'vrf__tenant', 'tenant', 'nat_inside', 'assigned_object' - ) + queryset = IPAddress.objects.all() filterset = filters.IPAddressFilterSet filterset_form = forms.IPAddressFilterForm table = tables.IPAddressDetailTable @@ -653,7 +651,7 @@ class IPAddressBulkDeleteView(BulkDeleteView): # class VLANGroupListView(ObjectListView): - queryset = VLANGroup.objects.prefetch_related('site').annotate( + queryset = VLANGroup.objects.annotate( vlan_count=Count('vlans') ).order_by(*VLANGroup._meta.ordering) filterset = filters.VLANGroupFilterSet @@ -728,9 +726,7 @@ class VLANGroupVLANsView(ObjectView): # class VLANListView(ObjectListView): - queryset = VLAN.objects.prefetch_related( - 'site', 'group', 'tenant', 'role', 'prefixes' - ) + queryset = VLAN.objects.all() filterset = filters.VLANFilterSet filterset_form = forms.VLANFilterForm table = tables.VLANDetailTable @@ -830,7 +826,7 @@ class VLANBulkDeleteView(BulkDeleteView): # class ServiceListView(ObjectListView): - queryset = Service.objects.prefetch_related('device', 'virtual_machine') + queryset = Service.objects.all() filterset = filters.ServiceFilterSet filterset_form = forms.ServiceFilterForm table = tables.ServiceTable diff --git a/netbox/secrets/views.py b/netbox/secrets/views.py index b01a19738..4442341d7 100644 --- a/netbox/secrets/views.py +++ b/netbox/secrets/views.py @@ -58,7 +58,7 @@ class SecretRoleBulkDeleteView(BulkDeleteView): # class SecretListView(ObjectListView): - queryset = Secret.objects.prefetch_related('role', 'tags') + queryset = Secret.objects.all() filterset = filters.SecretFilterSet filterset_form = forms.SecretFilterForm table = tables.SecretTable diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index b129177eb..16c801580 100644 --- a/netbox/tenancy/views.py +++ b/netbox/tenancy/views.py @@ -58,7 +58,7 @@ class TenantGroupBulkDeleteView(BulkDeleteView): # class TenantListView(ObjectListView): - queryset = Tenant.objects.prefetch_related('group') + queryset = Tenant.objects.all() filterset = filters.TenantFilterSet filterset_form = forms.TenantFilterForm table = tables.TenantTable diff --git a/netbox/utilities/views.py b/netbox/utilities/views.py index b6731491c..3fac91a58 100644 --- a/netbox/utilities/views.py +++ b/netbox/utilities/views.py @@ -195,7 +195,8 @@ class ObjectListView(ObjectPermissionRequiredMixin, View): """ List a series of objects. - queryset: The queryset of objects to display + queryset: The queryset of objects to display. Note: Prefetching related objects is not necessary, as the + table will prefetch objects as needed depending on the columns being displayed. filter: A django-filter FilterSet that is applied to the queryset filter_form: The form used to render filter options table: The django-tables2 Table used to render the objects list diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index d970ea3bc..381b59896 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -83,7 +83,7 @@ class ClusterGroupBulkDeleteView(BulkDeleteView): class ClusterListView(ObjectListView): permission_required = 'virtualization.view_cluster' - queryset = Cluster.objects.prefetch_related('type', 'group', 'site', 'tenant').annotate( + queryset = Cluster.objects.annotate( device_count=get_subquery(Device, 'cluster'), vm_count=get_subquery(VirtualMachine, 'cluster') ) @@ -230,7 +230,7 @@ class ClusterRemoveDevicesView(ObjectEditView): # class VirtualMachineListView(ObjectListView): - queryset = VirtualMachine.objects.prefetch_related('cluster', 'tenant', 'role', 'primary_ip4', 'primary_ip6') + queryset = VirtualMachine.objects.all() filterset = filters.VirtualMachineFilterSet filterset_form = forms.VirtualMachineFilterForm table = tables.VirtualMachineDetailTable @@ -311,7 +311,7 @@ class VirtualMachineBulkDeleteView(BulkDeleteView): # class VMInterfaceListView(ObjectListView): - queryset = VMInterface.objects.prefetch_related('virtual_machine') + queryset = VMInterface.objects.all() filterset = filters.VMInterfaceFilterSet filterset_form = forms.VMInterfaceFilterForm table = tables.VMInterfaceTable