From c967b4742e720e79a31ca63d583a4a5c2a09262d Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 15 May 2024 15:08:16 -0700 Subject: [PATCH] 14953 fix serializers when using add_related_count --- netbox/dcim/api/serializers_/sites.py | 18 ++++++++++++++++++ netbox/tenancy/api/serializers_/contacts.py | 6 ++++++ netbox/tenancy/api/serializers_/tenants.py | 6 ++++++ .../wireless/api/serializers_/wirelesslans.py | 6 ++++++ 4 files changed, 36 insertions(+) diff --git a/netbox/dcim/api/serializers_/sites.py b/netbox/dcim/api/serializers_/sites.py index 1e5e41069..e06ee6b31 100644 --- a/netbox/dcim/api/serializers_/sites.py +++ b/netbox/dcim/api/serializers_/sites.py @@ -31,6 +31,12 @@ class RegionSerializer(NestedGroupModelSerializer): ] brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'site_count', '_depth') + def create(self, request, *args, **kwargs): + # this is required as tenant_count is added in the view with add_related_count + instance = super().create(request, *args, **kwargs) + instance.site_count = 0 + return instance + class SiteGroupSerializer(NestedGroupModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:sitegroup-detail') @@ -45,6 +51,12 @@ class SiteGroupSerializer(NestedGroupModelSerializer): ] brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'site_count', '_depth') + def create(self, request, *args, **kwargs): + # this is required as tenant_count is added in the view with add_related_count + instance = super().create(request, *args, **kwargs) + instance.site_count = 0 + return instance + class SiteSerializer(NetBoxModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:site-detail') @@ -96,3 +108,9 @@ class LocationSerializer(NestedGroupModelSerializer): 'tags', 'custom_fields', 'created', 'last_updated', 'rack_count', 'device_count', '_depth', ] brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'rack_count', '_depth') + + def create(self, request, *args, **kwargs): + # this is required as tenant_count is added in the view with add_related_count + instance = super().create(request, *args, **kwargs) + instance.rack_count = 0 + return instance diff --git a/netbox/tenancy/api/serializers_/contacts.py b/netbox/tenancy/api/serializers_/contacts.py index 38ffd2393..80b28ac89 100644 --- a/netbox/tenancy/api/serializers_/contacts.py +++ b/netbox/tenancy/api/serializers_/contacts.py @@ -31,6 +31,12 @@ class ContactGroupSerializer(NestedGroupModelSerializer): ] brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'contact_count', '_depth') + def create(self, request, *args, **kwargs): + # this is required as tenant_count is added in the view with add_related_count + instance = super().create(request, *args, **kwargs) + instance.contact_count = 0 + return instance + class ContactRoleSerializer(NetBoxModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:contactrole-detail') diff --git a/netbox/tenancy/api/serializers_/tenants.py b/netbox/tenancy/api/serializers_/tenants.py index 10b38076e..ac604b22b 100644 --- a/netbox/tenancy/api/serializers_/tenants.py +++ b/netbox/tenancy/api/serializers_/tenants.py @@ -24,6 +24,12 @@ class TenantGroupSerializer(NestedGroupModelSerializer): ] brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'tenant_count', '_depth') + def create(self, request, *args, **kwargs): + # this is required as tenant_count is added in the view with add_related_count + instance = super().create(request, *args, **kwargs) + instance.tenant_count = 0 + return instance + class TenantSerializer(NetBoxModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenant-detail') diff --git a/netbox/wireless/api/serializers_/wirelesslans.py b/netbox/wireless/api/serializers_/wirelesslans.py index d4356c881..07e866c16 100644 --- a/netbox/wireless/api/serializers_/wirelesslans.py +++ b/netbox/wireless/api/serializers_/wirelesslans.py @@ -27,6 +27,12 @@ class WirelessLANGroupSerializer(NestedGroupModelSerializer): ] brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'wirelesslan_count', '_depth') + def create(self, request, *args, **kwargs): + # this is required as tenant_count is added in the view with add_related_count + instance = super().create(request, *args, **kwargs) + instance.wirelesslan_count = 0 + return instance + class WirelessLANSerializer(NetBoxModelSerializer): url = serializers.HyperlinkedIdentityField(view_name='wireless-api:wirelesslan-detail')