From 0b068efe1745fc66f1b76671f24c40b7aac488a0 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 25 Nov 2020 13:51:53 -0500 Subject: [PATCH] Convert circuits to use subqueries --- netbox/circuits/api/views.py | 9 +++++---- netbox/circuits/views.py | 21 ++++++++++++++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/netbox/circuits/api/views.py b/netbox/circuits/api/views.py index 746ee02f6..dbb2b29b1 100644 --- a/netbox/circuits/api/views.py +++ b/netbox/circuits/api/views.py @@ -10,6 +10,7 @@ from extras.api.serializers import RenderedGraphSerializer from extras.api.views import CustomFieldModelViewSet from extras.models import Graph from utilities.api import ModelViewSet +from utilities.utils import get_subquery from . import serializers @@ -27,8 +28,8 @@ class CircuitsRootView(APIRootView): class ProviderViewSet(CustomFieldModelViewSet): queryset = Provider.objects.prefetch_related('tags').annotate( - circuit_count=Count('circuits') - ).order_by(*Provider._meta.ordering) + circuit_count=get_subquery(Circuit, 'provider') + ) serializer_class = serializers.ProviderSerializer filterset_class = filters.ProviderFilterSet @@ -49,8 +50,8 @@ class ProviderViewSet(CustomFieldModelViewSet): class CircuitTypeViewSet(ModelViewSet): queryset = CircuitType.objects.annotate( - circuit_count=Count('circuits') - ).order_by(*CircuitType._meta.ordering) + circuit_count=get_subquery(Circuit, 'type') + ) serializer_class = serializers.CircuitTypeSerializer filterset_class = filters.CircuitTypeFilterSet diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 6c29d41f1..22c753123 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -7,6 +7,7 @@ from django_tables2 import RequestConfig from extras.models import Graph from utilities.forms import ConfirmationForm from utilities.paginator import EnhancedPaginator, get_paginate_count +from utilities.utils import get_subquery from utilities.views import ( BulkDeleteView, BulkEditView, BulkImportView, ObjectView, ObjectDeleteView, ObjectEditView, ObjectListView, ) @@ -20,7 +21,9 @@ from .models import Circuit, CircuitTermination, CircuitType, Provider # class ProviderListView(ObjectListView): - queryset = Provider.objects.annotate(count_circuits=Count('circuits')).order_by(*Provider._meta.ordering) + queryset = Provider.objects.annotate( + count_circuits=get_subquery(Circuit, 'provider') + ) filterset = filters.ProviderFilterSet filterset_form = forms.ProviderFilterForm table = tables.ProviderTable @@ -72,14 +75,18 @@ class ProviderBulkImportView(BulkImportView): class ProviderBulkEditView(BulkEditView): - queryset = Provider.objects.annotate(count_circuits=Count('circuits')).order_by(*Provider._meta.ordering) + queryset = Provider.objects.annotate( + count_circuits=get_subquery(Circuit, 'provider') + ) filterset = filters.ProviderFilterSet table = tables.ProviderTable form = forms.ProviderBulkEditForm class ProviderBulkDeleteView(BulkDeleteView): - queryset = Provider.objects.annotate(count_circuits=Count('circuits')).order_by(*Provider._meta.ordering) + queryset = Provider.objects.annotate( + count_circuits=get_subquery(Circuit, 'provider') + ) filterset = filters.ProviderFilterSet table = tables.ProviderTable @@ -89,7 +96,9 @@ class ProviderBulkDeleteView(BulkDeleteView): # class CircuitTypeListView(ObjectListView): - queryset = CircuitType.objects.annotate(circuit_count=Count('circuits')).order_by(*CircuitType._meta.ordering) + queryset = CircuitType.objects.annotate( + circuit_count=get_subquery(Circuit, 'type') + ) table = tables.CircuitTypeTable @@ -109,7 +118,9 @@ class CircuitTypeBulkImportView(BulkImportView): class CircuitTypeBulkDeleteView(BulkDeleteView): - queryset = CircuitType.objects.annotate(circuit_count=Count('circuits')).order_by(*CircuitType._meta.ordering) + queryset = CircuitType.objects.annotate( + circuit_count=get_subquery(Circuit, 'type') + ) table = tables.CircuitTypeTable