Implement get_subquery() for annotation of child object counts; Rename dcim.Site 'count_*' fields

This commit is contained in:
Jeremy Stretch
2019-04-19 16:09:22 -04:00
parent 7d41a9ccdb
commit f4bbdf30e8
6 changed files with 50 additions and 58 deletions

View File

@@ -10,6 +10,7 @@ from extras.api.views import CustomFieldModelViewSet
from ipam import filters
from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
from utilities.api import FieldChoicesViewSet, ModelViewSet
from utilities.utils import get_subquery
from . import serializers
@@ -66,15 +67,9 @@ class AggregateViewSet(CustomFieldModelViewSet):
#
class RoleViewSet(ModelViewSet):
prefix_count = Prefix.objects.filter(
role=OuterRef('pk')
).order_by().values('role').annotate(c=Count('*')).values('c')
vlan_count = VLAN.objects.filter(
role=OuterRef('pk')
).order_by().values('role').annotate(c=Count('*')).values('c')
queryset = Role.objects.annotate(
prefix_count=Subquery(prefix_count),
vlan_count=Subquery(vlan_count)
prefix_count=get_subquery(Prefix, 'role'),
vlan_count=get_subquery(VLAN, 'role')
)
serializer_class = serializers.RoleSerializer
filterset_class = filters.RoleFilter