diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index 2d7107ef4..89934cf4c 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -146,8 +146,8 @@ class RackGroupViewSet(ModelViewSet): class RackRoleViewSet(ModelViewSet): queryset = RackRole.objects.annotate( - rack_count=Count('racks') - ).order_by(*RackRole._meta.ordering) + rack_count=get_subquery(Rack, 'role') + ) serializer_class = serializers.RackRoleSerializer filterset_class = filters.RackRoleFilterSet @@ -248,8 +248,8 @@ class ManufacturerViewSet(ModelViewSet): class DeviceTypeViewSet(CustomFieldModelViewSet): queryset = DeviceType.objects.prefetch_related('manufacturer', 'tags').annotate( - device_count=Count('instances') - ).order_by(*DeviceType._meta.ordering) + device_count=get_subquery(Device, 'device_type') + ) serializer_class = serializers.DeviceTypeSerializer filterset_class = filters.DeviceTypeFilterSet @@ -619,8 +619,8 @@ class CableViewSet(ModelViewSet): class VirtualChassisViewSet(ModelViewSet): queryset = VirtualChassis.objects.prefetch_related('tags').annotate( - member_count=Count('members', distinct=True) - ).order_by(*VirtualChassis._meta.ordering) + member_count=get_subquery(Device, 'virtual_chassis') + ) serializer_class = serializers.VirtualChassisSerializer filterset_class = filters.VirtualChassisFilterSet @@ -633,8 +633,8 @@ class PowerPanelViewSet(ModelViewSet): queryset = PowerPanel.objects.prefetch_related( 'site', 'rack_group' ).annotate( - powerfeed_count=Count('powerfeeds') - ).order_by(*PowerPanel._meta.ordering) + powerfeed_count=get_subquery(PowerFeed, 'power_panel') + ) serializer_class = serializers.PowerPanelSerializer filterset_class = filters.PowerPanelFilterSet diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 42175d782..44a2d2359 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -263,7 +263,9 @@ class RackGroupBulkDeleteView(BulkDeleteView): # 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 @@ -283,7 +285,9 @@ class RackRoleBulkImportView(BulkImportView): 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 @@ -295,8 +299,8 @@ class RackListView(ObjectListView): queryset = Rack.objects.prefetch_related( 'site', 'group', 'tenant', 'role', 'devices__device_type' ).annotate( - device_count=Count('devices') - ).order_by(*Rack._meta.ordering) + device_count=get_subquery(Device, 'rack') + ) filterset = filters.RackFilterSet filterset_form = forms.RackFilterForm table = tables.RackDetailTable @@ -507,8 +511,8 @@ class ManufacturerBulkImportView(BulkImportView): class ManufacturerBulkDeleteView(BulkDeleteView): queryset = Manufacturer.objects.annotate( - devicetype_count=Count('device_types') - ).order_by(*Manufacturer._meta.ordering) + devicetype_count=get_subquery(DeviceType, 'manufacturer') + ) table = tables.ManufacturerTable @@ -518,8 +522,8 @@ class ManufacturerBulkDeleteView(BulkDeleteView): class DeviceTypeListView(ObjectListView): queryset = DeviceType.objects.prefetch_related('manufacturer').annotate( - instance_count=Count('instances') - ).order_by(*DeviceType._meta.ordering) + instance_count=get_subquery(Device, 'device_type') + ) filterset = filters.DeviceTypeFilterSet filterset_form = forms.DeviceTypeFilterForm table = tables.DeviceTypeTable @@ -628,8 +632,8 @@ class DeviceTypeImportView(ObjectImportView): class DeviceTypeBulkEditView(BulkEditView): queryset = DeviceType.objects.prefetch_related('manufacturer').annotate( - instance_count=Count('instances') - ).order_by(*DeviceType._meta.ordering) + instance_count=get_subquery(Device, 'device_type') + ) filterset = filters.DeviceTypeFilterSet table = tables.DeviceTypeTable form = forms.DeviceTypeBulkEditForm @@ -637,8 +641,8 @@ class DeviceTypeBulkEditView(BulkEditView): class DeviceTypeBulkDeleteView(BulkDeleteView): queryset = DeviceType.objects.prefetch_related('manufacturer').annotate( - instance_count=Count('instances') - ).order_by(*DeviceType._meta.ordering) + instance_count=get_subquery(Device, 'device_type') + ) filterset = filters.DeviceTypeFilterSet table = tables.DeviceTypeTable @@ -2198,8 +2202,8 @@ class InterfaceConnectionsListView(ObjectListView): class VirtualChassisListView(ObjectListView): queryset = VirtualChassis.objects.prefetch_related('master').annotate( - member_count=Count('members', distinct=True) - ).order_by(*VirtualChassis._meta.ordering) + member_count=get_subquery(Device, 'virtual_chassis') + ) table = tables.VirtualChassisTable filterset = filters.VirtualChassisFilterSet filterset_form = forms.VirtualChassisFilterForm @@ -2430,8 +2434,8 @@ class PowerPanelListView(ObjectListView): queryset = PowerPanel.objects.prefetch_related( 'site', 'rack_group' ).annotate( - powerfeed_count=Count('powerfeeds') - ).order_by(*PowerPanel._meta.ordering) + powerfeed_count=get_subquery(PowerFeed, 'power_panel') + ) filterset = filters.PowerPanelFilterSet filterset_form = forms.PowerPanelFilterForm table = tables.PowerPanelTable @@ -2482,8 +2486,8 @@ class PowerPanelBulkDeleteView(BulkDeleteView): queryset = PowerPanel.objects.prefetch_related( 'site', 'rack_group' ).annotate( - rack_count=Count('powerfeeds') - ).order_by(*PowerPanel._meta.ordering) + powerfeed_count=get_subquery(PowerFeed, 'power_panel') + ) filterset = filters.PowerPanelFilterSet table = tables.PowerPanelTable