Convert dcim to use subqueries

This commit is contained in:
Jeremy Stretch 2020-11-25 14:01:20 -05:00
parent 0b068efe17
commit 5bc0e1abea
2 changed files with 30 additions and 26 deletions

View File

@ -146,8 +146,8 @@ class RackGroupViewSet(ModelViewSet):
class RackRoleViewSet(ModelViewSet): class RackRoleViewSet(ModelViewSet):
queryset = RackRole.objects.annotate( queryset = RackRole.objects.annotate(
rack_count=Count('racks') rack_count=get_subquery(Rack, 'role')
).order_by(*RackRole._meta.ordering) )
serializer_class = serializers.RackRoleSerializer serializer_class = serializers.RackRoleSerializer
filterset_class = filters.RackRoleFilterSet filterset_class = filters.RackRoleFilterSet
@ -248,8 +248,8 @@ class ManufacturerViewSet(ModelViewSet):
class DeviceTypeViewSet(CustomFieldModelViewSet): class DeviceTypeViewSet(CustomFieldModelViewSet):
queryset = DeviceType.objects.prefetch_related('manufacturer', 'tags').annotate( queryset = DeviceType.objects.prefetch_related('manufacturer', 'tags').annotate(
device_count=Count('instances') device_count=get_subquery(Device, 'device_type')
).order_by(*DeviceType._meta.ordering) )
serializer_class = serializers.DeviceTypeSerializer serializer_class = serializers.DeviceTypeSerializer
filterset_class = filters.DeviceTypeFilterSet filterset_class = filters.DeviceTypeFilterSet
@ -619,8 +619,8 @@ class CableViewSet(ModelViewSet):
class VirtualChassisViewSet(ModelViewSet): class VirtualChassisViewSet(ModelViewSet):
queryset = VirtualChassis.objects.prefetch_related('tags').annotate( queryset = VirtualChassis.objects.prefetch_related('tags').annotate(
member_count=Count('members', distinct=True) member_count=get_subquery(Device, 'virtual_chassis')
).order_by(*VirtualChassis._meta.ordering) )
serializer_class = serializers.VirtualChassisSerializer serializer_class = serializers.VirtualChassisSerializer
filterset_class = filters.VirtualChassisFilterSet filterset_class = filters.VirtualChassisFilterSet
@ -633,8 +633,8 @@ class PowerPanelViewSet(ModelViewSet):
queryset = PowerPanel.objects.prefetch_related( queryset = PowerPanel.objects.prefetch_related(
'site', 'rack_group' 'site', 'rack_group'
).annotate( ).annotate(
powerfeed_count=Count('powerfeeds') powerfeed_count=get_subquery(PowerFeed, 'power_panel')
).order_by(*PowerPanel._meta.ordering) )
serializer_class = serializers.PowerPanelSerializer serializer_class = serializers.PowerPanelSerializer
filterset_class = filters.PowerPanelFilterSet filterset_class = filters.PowerPanelFilterSet

View File

@ -263,7 +263,9 @@ class RackGroupBulkDeleteView(BulkDeleteView):
# #
class RackRoleListView(ObjectListView): class RackRoleListView(ObjectListView):
queryset = RackRole.objects.annotate(rack_count=Count('racks')).order_by(*RackRole._meta.ordering) queryset = RackRole.objects.annotate(
rack_count=get_subquery(Rack, 'role')
)
table = tables.RackRoleTable table = tables.RackRoleTable
@ -283,7 +285,9 @@ class RackRoleBulkImportView(BulkImportView):
class RackRoleBulkDeleteView(BulkDeleteView): class RackRoleBulkDeleteView(BulkDeleteView):
queryset = RackRole.objects.annotate(rack_count=Count('racks')).order_by(*RackRole._meta.ordering) queryset = RackRole.objects.annotate(
rack_count=get_subquery(Rack, 'role')
)
table = tables.RackRoleTable table = tables.RackRoleTable
@ -295,8 +299,8 @@ class RackListView(ObjectListView):
queryset = Rack.objects.prefetch_related( queryset = Rack.objects.prefetch_related(
'site', 'group', 'tenant', 'role', 'devices__device_type' 'site', 'group', 'tenant', 'role', 'devices__device_type'
).annotate( ).annotate(
device_count=Count('devices') device_count=get_subquery(Device, 'rack')
).order_by(*Rack._meta.ordering) )
filterset = filters.RackFilterSet filterset = filters.RackFilterSet
filterset_form = forms.RackFilterForm filterset_form = forms.RackFilterForm
table = tables.RackDetailTable table = tables.RackDetailTable
@ -507,8 +511,8 @@ class ManufacturerBulkImportView(BulkImportView):
class ManufacturerBulkDeleteView(BulkDeleteView): class ManufacturerBulkDeleteView(BulkDeleteView):
queryset = Manufacturer.objects.annotate( queryset = Manufacturer.objects.annotate(
devicetype_count=Count('device_types') devicetype_count=get_subquery(DeviceType, 'manufacturer')
).order_by(*Manufacturer._meta.ordering) )
table = tables.ManufacturerTable table = tables.ManufacturerTable
@ -518,8 +522,8 @@ class ManufacturerBulkDeleteView(BulkDeleteView):
class DeviceTypeListView(ObjectListView): class DeviceTypeListView(ObjectListView):
queryset = DeviceType.objects.prefetch_related('manufacturer').annotate( queryset = DeviceType.objects.prefetch_related('manufacturer').annotate(
instance_count=Count('instances') instance_count=get_subquery(Device, 'device_type')
).order_by(*DeviceType._meta.ordering) )
filterset = filters.DeviceTypeFilterSet filterset = filters.DeviceTypeFilterSet
filterset_form = forms.DeviceTypeFilterForm filterset_form = forms.DeviceTypeFilterForm
table = tables.DeviceTypeTable table = tables.DeviceTypeTable
@ -628,8 +632,8 @@ class DeviceTypeImportView(ObjectImportView):
class DeviceTypeBulkEditView(BulkEditView): class DeviceTypeBulkEditView(BulkEditView):
queryset = DeviceType.objects.prefetch_related('manufacturer').annotate( queryset = DeviceType.objects.prefetch_related('manufacturer').annotate(
instance_count=Count('instances') instance_count=get_subquery(Device, 'device_type')
).order_by(*DeviceType._meta.ordering) )
filterset = filters.DeviceTypeFilterSet filterset = filters.DeviceTypeFilterSet
table = tables.DeviceTypeTable table = tables.DeviceTypeTable
form = forms.DeviceTypeBulkEditForm form = forms.DeviceTypeBulkEditForm
@ -637,8 +641,8 @@ class DeviceTypeBulkEditView(BulkEditView):
class DeviceTypeBulkDeleteView(BulkDeleteView): class DeviceTypeBulkDeleteView(BulkDeleteView):
queryset = DeviceType.objects.prefetch_related('manufacturer').annotate( queryset = DeviceType.objects.prefetch_related('manufacturer').annotate(
instance_count=Count('instances') instance_count=get_subquery(Device, 'device_type')
).order_by(*DeviceType._meta.ordering) )
filterset = filters.DeviceTypeFilterSet filterset = filters.DeviceTypeFilterSet
table = tables.DeviceTypeTable table = tables.DeviceTypeTable
@ -2198,8 +2202,8 @@ class InterfaceConnectionsListView(ObjectListView):
class VirtualChassisListView(ObjectListView): class VirtualChassisListView(ObjectListView):
queryset = VirtualChassis.objects.prefetch_related('master').annotate( queryset = VirtualChassis.objects.prefetch_related('master').annotate(
member_count=Count('members', distinct=True) member_count=get_subquery(Device, 'virtual_chassis')
).order_by(*VirtualChassis._meta.ordering) )
table = tables.VirtualChassisTable table = tables.VirtualChassisTable
filterset = filters.VirtualChassisFilterSet filterset = filters.VirtualChassisFilterSet
filterset_form = forms.VirtualChassisFilterForm filterset_form = forms.VirtualChassisFilterForm
@ -2430,8 +2434,8 @@ class PowerPanelListView(ObjectListView):
queryset = PowerPanel.objects.prefetch_related( queryset = PowerPanel.objects.prefetch_related(
'site', 'rack_group' 'site', 'rack_group'
).annotate( ).annotate(
powerfeed_count=Count('powerfeeds') powerfeed_count=get_subquery(PowerFeed, 'power_panel')
).order_by(*PowerPanel._meta.ordering) )
filterset = filters.PowerPanelFilterSet filterset = filters.PowerPanelFilterSet
filterset_form = forms.PowerPanelFilterForm filterset_form = forms.PowerPanelFilterForm
table = tables.PowerPanelTable table = tables.PowerPanelTable
@ -2482,8 +2486,8 @@ class PowerPanelBulkDeleteView(BulkDeleteView):
queryset = PowerPanel.objects.prefetch_related( queryset = PowerPanel.objects.prefetch_related(
'site', 'rack_group' 'site', 'rack_group'
).annotate( ).annotate(
rack_count=Count('powerfeeds') powerfeed_count=get_subquery(PowerFeed, 'power_panel')
).order_by(*PowerPanel._meta.ordering) )
filterset = filters.PowerPanelFilterSet filterset = filters.PowerPanelFilterSet
table = tables.PowerPanelTable table = tables.PowerPanelTable