1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Added child counts to API serializers (WIP)

This commit is contained in:
Jeremy Stretch
2019-04-12 17:07:56 -04:00
parent b1c160f9d4
commit a46b43bff6
26 changed files with 206 additions and 94 deletions

View File

@@ -19,26 +19,29 @@ __all__ = [
class NestedClusterTypeSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustertype-detail')
cluster_count = serializers.IntegerField(read_only=True)
class Meta:
model = ClusterType
fields = ['id', 'url', 'name', 'slug']
fields = ['id', 'url', 'name', 'slug', 'cluster_count']
class NestedClusterGroupSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustergroup-detail')
cluster_count = serializers.IntegerField(read_only=True)
class Meta:
model = ClusterGroup
fields = ['id', 'url', 'name', 'slug']
fields = ['id', 'url', 'name', 'slug', 'cluster_count']
class NestedClusterSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:cluster-detail')
virtualmachine_count = serializers.IntegerField(read_only=True)
class Meta:
model = Cluster
fields = ['id', 'url', 'name']
fields = ['id', 'url', 'name', 'virtualmachine_count']
#

View File

@@ -20,17 +20,19 @@ from .nested_serializers import *
#
class ClusterTypeSerializer(ValidatedModelSerializer):
cluster_count = serializers.IntegerField(read_only=True)
class Meta:
model = ClusterType
fields = ['id', 'name', 'slug']
fields = ['id', 'name', 'slug', 'cluster_count']
class ClusterGroupSerializer(ValidatedModelSerializer):
cluster_count = serializers.IntegerField(read_only=True)
class Meta:
model = ClusterGroup
fields = ['id', 'name', 'slug']
fields = ['id', 'name', 'slug', 'cluster_count']
class ClusterSerializer(TaggitSerializer, CustomFieldModelSerializer):
@@ -38,11 +40,13 @@ class ClusterSerializer(TaggitSerializer, CustomFieldModelSerializer):
group = NestedClusterGroupSerializer(required=False, allow_null=True)
site = NestedSiteSerializer(required=False, allow_null=True)
tags = TagListSerializerField(required=False)
virtualmachine_count = serializers.IntegerField(read_only=True)
class Meta:
model = Cluster
fields = [
'id', 'name', 'type', 'group', 'site', 'comments', 'tags', 'custom_fields', 'created', 'last_updated',
'virtualmachine_count',
]

View File

@@ -1,3 +1,5 @@
from django.db.models import Count
from dcim.models import Interface
from extras.api.views import CustomFieldModelViewSet
from utilities.api import FieldChoicesViewSet, ModelViewSet
@@ -21,19 +23,25 @@ class VirtualizationFieldChoicesViewSet(FieldChoicesViewSet):
#
class ClusterTypeViewSet(ModelViewSet):
queryset = ClusterType.objects.all()
queryset = ClusterType.objects.annotate(
cluster_count=Count('clusters')
)
serializer_class = serializers.ClusterTypeSerializer
filterset_class = filters.ClusterTypeFilter
class ClusterGroupViewSet(ModelViewSet):
queryset = ClusterGroup.objects.all()
queryset = ClusterGroup.objects.annotate(
cluster_count=Count('clusters')
)
serializer_class = serializers.ClusterGroupSerializer
filterset_class = filters.ClusterGroupFilter
class ClusterViewSet(CustomFieldModelViewSet):
queryset = Cluster.objects.select_related('type', 'group').prefetch_related('tags')
queryset = Cluster.objects.select_related('type', 'group').prefetch_related('tags').annotate(
virtualmachine_count=Count('virtual_machines')
)
serializer_class = serializers.ClusterSerializer
filterset_class = filters.ClusterFilter

View File

@@ -40,7 +40,7 @@ class ClusterTypeTest(APITestCase):
self.assertEqual(
sorted(response.data['results'][0]),
['id', 'name', 'slug', 'url']
['cluster_count', 'id', 'name', 'slug', 'url']
)
def test_create_clustertype(self):
@@ -141,7 +141,7 @@ class ClusterGroupTest(APITestCase):
self.assertEqual(
sorted(response.data['results'][0]),
['id', 'name', 'slug', 'url']
['cluster_count', 'id', 'name', 'slug', 'url']
)
def test_create_clustergroup(self):
@@ -245,7 +245,7 @@ class ClusterTest(APITestCase):
self.assertEqual(
sorted(response.data['results'][0]),
['id', 'name', 'url']
['id', 'name', 'url', 'virtualmachine_count']
)
def test_create_cluster(self):