From 52069c8a43bbddb89f8ae678a58e64d30351e802 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 25 Nov 2020 14:17:38 -0500 Subject: [PATCH] Convert virtualization to use subqueries --- netbox/virtualization/api/views.py | 9 ++++----- netbox/virtualization/views.py | 18 +++++++++++++----- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/netbox/virtualization/api/views.py b/netbox/virtualization/api/views.py index 55393b110..5c8afa954 100644 --- a/netbox/virtualization/api/views.py +++ b/netbox/virtualization/api/views.py @@ -1,4 +1,3 @@ -from django.db.models import Count from django.shortcuts import get_object_or_404 from rest_framework.decorators import action from rest_framework.response import Response @@ -29,16 +28,16 @@ class VirtualizationRootView(APIRootView): class ClusterTypeViewSet(ModelViewSet): queryset = ClusterType.objects.annotate( - cluster_count=Count('clusters') - ).order_by(*ClusterType._meta.ordering) + cluster_count=get_subquery(Cluster, 'type') + ) serializer_class = serializers.ClusterTypeSerializer filterset_class = filters.ClusterTypeFilterSet class ClusterGroupViewSet(ModelViewSet): queryset = ClusterGroup.objects.annotate( - cluster_count=Count('clusters') - ).order_by(*ClusterGroup._meta.ordering) + cluster_count=get_subquery(Cluster, 'group') + ) serializer_class = serializers.ClusterGroupSerializer filterset_class = filters.ClusterGroupFilterSet diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 4cabfedeb..2b7ae3a13 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -1,6 +1,6 @@ from django.contrib import messages from django.db import transaction -from django.db.models import Count, Prefetch +from django.db.models import Prefetch from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse @@ -23,7 +23,9 @@ from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterf # class ClusterTypeListView(ObjectListView): - queryset = ClusterType.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterType._meta.ordering) + queryset = ClusterType.objects.annotate( + cluster_count=get_subquery(Cluster, 'type') + ) table = tables.ClusterTypeTable @@ -43,7 +45,9 @@ class ClusterTypeBulkImportView(BulkImportView): class ClusterTypeBulkDeleteView(BulkDeleteView): - queryset = ClusterType.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterType._meta.ordering) + queryset = ClusterType.objects.annotate( + cluster_count=get_subquery(Cluster, 'type') + ) table = tables.ClusterTypeTable @@ -52,7 +56,9 @@ class ClusterTypeBulkDeleteView(BulkDeleteView): # class ClusterGroupListView(ObjectListView): - queryset = ClusterGroup.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterGroup._meta.ordering) + queryset = ClusterGroup.objects.annotate( + cluster_count=get_subquery(Cluster, 'group') + ) table = tables.ClusterGroupTable @@ -72,7 +78,9 @@ class ClusterGroupBulkImportView(BulkImportView): class ClusterGroupBulkDeleteView(BulkDeleteView): - queryset = ClusterGroup.objects.annotate(cluster_count=Count('clusters')).order_by(*ClusterGroup._meta.ordering) + queryset = ClusterGroup.objects.annotate( + cluster_count=get_subquery(Cluster, 'group') + ) table = tables.ClusterGroupTable