Update global search view to use subqueries where appropriate

This commit is contained in:
Jeremy Stretch 2020-11-25 14:45:41 -05:00
parent 52069c8a43
commit a43f2c89c1

View File

@ -48,8 +48,8 @@ SEARCH_TYPES = OrderedDict((
# Circuits # Circuits
('provider', { ('provider', {
'queryset': Provider.objects.annotate( 'queryset': Provider.objects.annotate(
count_circuits=Count('circuits') count_circuits=get_subquery(Circuit, 'provider')
).order_by(*Provider._meta.ordering), ),
'filterset': ProviderFilterSet, 'filterset': ProviderFilterSet,
'table': ProviderTable, 'table': ProviderTable,
'url': 'circuits:provider_list', 'url': 'circuits:provider_list',
@ -76,17 +76,21 @@ SEARCH_TYPES = OrderedDict((
'url': 'dcim:rack_list', 'url': 'dcim:rack_list',
}), }),
('rackgroup', { ('rackgroup', {
'queryset': RackGroup.objects.prefetch_related('site').annotate( 'queryset': RackGroup.objects.add_related_count(
rack_count=Count('racks') RackGroup.objects.all(),
).order_by(*RackGroup._meta.ordering), Rack,
'group',
'rack_count',
cumulative=True
).prefetch_related('site'),
'filterset': RackGroupFilterSet, 'filterset': RackGroupFilterSet,
'table': RackGroupTable, 'table': RackGroupTable,
'url': 'dcim:rackgroup_list', 'url': 'dcim:rackgroup_list',
}), }),
('devicetype', { ('devicetype', {
'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': DeviceTypeFilterSet, 'filterset': DeviceTypeFilterSet,
'table': DeviceTypeTable, 'table': DeviceTypeTable,
'url': 'dcim:devicetype_list', 'url': 'dcim:devicetype_list',
@ -101,8 +105,8 @@ SEARCH_TYPES = OrderedDict((
}), }),
('virtualchassis', { ('virtualchassis', {
'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), ),
'filterset': VirtualChassisFilterSet, 'filterset': VirtualChassisFilterSet,
'table': VirtualChassisTable, 'table': VirtualChassisTable,
'url': 'dcim:virtualchassis_list', 'url': 'dcim:virtualchassis_list',