diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 8e9e7f3cb..f7dc0ebe7 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -8,6 +8,7 @@ from django.contrib.auth.mixins import PermissionRequiredMixin from django.core.exceptions import ValidationError from django.core.urlresolvers import reverse from django.db.models import Count, Sum +from django.db.models.functions import Coalesce from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect, render from django.utils.http import urlencode @@ -137,7 +138,7 @@ class SiteBulkEditView(PermissionRequiredMixin, BulkEditView): # class RackGroupListView(ObjectListView): - queryset = RackGroup.objects.annotate(rack_count=Count('racks')) + queryset = RackGroup.objects.select_related('site').annotate(rack_count=Count('racks')) filter = filters.RackGroupFilter filter_form = forms.RackGroupFilterForm table = tables.RackGroupTable @@ -188,8 +189,9 @@ class RackRoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): # class RackListView(ObjectListView): - queryset = Rack.objects.select_related('site').prefetch_related('devices__device_type')\ - .annotate(device_count=Count('devices', distinct=True), u_consumed=Sum('devices__device_type__u_height')) + queryset = Rack.objects.select_related('site', 'group', 'tenant', 'role').prefetch_related('devices__device_type')\ + .annotate(device_count=Count('devices', distinct=True), + u_consumed=Coalesce(Sum('devices__device_type__u_height'), 0)) filter = filters.RackFilter filter_form = forms.RackFilterForm table = tables.RackTable @@ -559,8 +561,8 @@ class PlatformBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): # class DeviceListView(ObjectListView): - queryset = Device.objects.select_related('device_type__manufacturer', 'device_role', 'rack__site', 'primary_ip4', - 'primary_ip6') + queryset = Device.objects.select_related('device_type__manufacturer', 'device_role', 'tenant', 'rack__site', + 'primary_ip4', 'primary_ip6') filter = filters.DeviceFilter filter_form = forms.DeviceFilterForm table = tables.DeviceTable diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index 6509f8cae..61bc7b9de 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -305,7 +305,7 @@ class RoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): # class PrefixListView(ObjectListView): - queryset = Prefix.objects.select_related('site', 'vrf__tenant', 'role') + queryset = Prefix.objects.select_related('site', 'vrf__tenant', 'tenant', 'role') filter = filters.PrefixFilter filter_form = forms.PrefixFilterForm table = tables.PrefixTable @@ -445,7 +445,7 @@ def prefix_ipaddresses(request, pk): # class IPAddressListView(ObjectListView): - queryset = IPAddress.objects.select_related('vrf__tenant', 'interface__device') + queryset = IPAddress.objects.select_related('vrf__tenant', 'tenant', 'interface__device') filter = filters.IPAddressFilter filter_form = forms.IPAddressFilterForm table = tables.IPAddressTable @@ -550,7 +550,7 @@ class IPAddressBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): # class VLANGroupListView(ObjectListView): - queryset = VLANGroup.objects.annotate(vlan_count=Count('vlans')) + queryset = VLANGroup.objects.select_related('site').annotate(vlan_count=Count('vlans')) filter = filters.VLANGroupFilter filter_form = forms.VLANGroupFilterForm table = tables.VLANGroupTable @@ -576,7 +576,7 @@ class VLANGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): # class VLANListView(ObjectListView): - queryset = VLAN.objects.select_related('site', 'role') + queryset = VLAN.objects.select_related('site', 'group', 'tenant', 'role') filter = filters.VLANFilter filter_form = forms.VLANFilterForm table = tables.VLANTable