diff --git a/netbox/dcim/api/nested_serializers.py b/netbox/dcim/api/nested_serializers.py index 29881a548..20dbb002f 100644 --- a/netbox/dcim/api/nested_serializers.py +++ b/netbox/dcim/api/nested_serializers.py @@ -1,3 +1,4 @@ +from drf_spectacular.utils import extend_schema_serializer from rest_framework import serializers from dcim import models @@ -53,6 +54,9 @@ __all__ = [ # Regions/sites # +@extend_schema_serializer( + exclude_fields=('site_count',), +) class NestedRegionSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:region-detail') site_count = serializers.IntegerField(read_only=True) @@ -63,6 +67,9 @@ class NestedRegionSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display', 'name', 'slug', 'site_count', '_depth'] +@extend_schema_serializer( + exclude_fields=('site_count',), +) class NestedSiteGroupSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:sitegroup-detail') site_count = serializers.IntegerField(read_only=True) @@ -85,6 +92,9 @@ class NestedSiteSerializer(WritableNestedSerializer): # Racks # +@extend_schema_serializer( + exclude_fields=('rack_count',), +) class NestedLocationSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:location-detail') rack_count = serializers.IntegerField(read_only=True) @@ -95,6 +105,9 @@ class NestedLocationSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display', 'name', 'slug', 'rack_count', '_depth'] +@extend_schema_serializer( + exclude_fields=('rack_count',), +) class NestedRackRoleSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackrole-detail') rack_count = serializers.IntegerField(read_only=True) @@ -104,6 +117,9 @@ class NestedRackRoleSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display', 'name', 'slug', 'rack_count'] +@extend_schema_serializer( + exclude_fields=('device_count',), +) class NestedRackSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rack-detail') device_count = serializers.IntegerField(read_only=True) @@ -129,6 +145,9 @@ class NestedRackReservationSerializer(WritableNestedSerializer): # Device/module types # +@extend_schema_serializer( + exclude_fields=('devicetype_count',), +) class NestedManufacturerSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:manufacturer-detail') devicetype_count = serializers.IntegerField(read_only=True) @@ -138,6 +157,9 @@ class NestedManufacturerSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display', 'name', 'slug', 'devicetype_count'] +@extend_schema_serializer( + exclude_fields=('device_count',), +) class NestedDeviceTypeSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicetype-detail') manufacturer = NestedManufacturerSerializer(read_only=True) @@ -247,6 +269,9 @@ class NestedInventoryItemTemplateSerializer(WritableNestedSerializer): # Devices # +@extend_schema_serializer( + exclude_fields=('device_count', 'virtualmachine_count'), +) class NestedDeviceRoleSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicerole-detail') device_count = serializers.IntegerField(read_only=True) @@ -257,6 +282,9 @@ class NestedDeviceRoleSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display', 'name', 'slug', 'device_count', 'virtualmachine_count'] +@extend_schema_serializer( + exclude_fields=('device_count', 'virtualmachine_count'), +) class NestedPlatformSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:platform-detail') device_count = serializers.IntegerField(read_only=True) @@ -412,6 +440,9 @@ class NestedInventoryItemSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display', 'device', 'name', '_depth'] +@extend_schema_serializer( + exclude_fields=('inventoryitem_count',), +) class NestedInventoryItemRoleSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:inventoryitemrole-detail') inventoryitem_count = serializers.IntegerField(read_only=True) @@ -437,6 +468,9 @@ class NestedCableSerializer(BaseModelSerializer): # Virtual chassis # +@extend_schema_serializer( + exclude_fields=('member_count',), +) class NestedVirtualChassisSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:virtualchassis-detail') master = NestedDeviceSerializer() @@ -451,6 +485,9 @@ class NestedVirtualChassisSerializer(WritableNestedSerializer): # Power panels/feeds # +@extend_schema_serializer( + exclude_fields=('powerfeed_count',), +) class NestedPowerPanelSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerpanel-detail') powerfeed_count = serializers.IntegerField(read_only=True) diff --git a/netbox/ipam/api/nested_serializers.py b/netbox/ipam/api/nested_serializers.py index 7809e84f8..06e413427 100644 --- a/netbox/ipam/api/nested_serializers.py +++ b/netbox/ipam/api/nested_serializers.py @@ -1,3 +1,4 @@ +from drf_spectacular.utils import extend_schema_serializer from rest_framework import serializers from ipam import models @@ -41,6 +42,9 @@ class NestedASNSerializer(WritableNestedSerializer): # VRFs # +@extend_schema_serializer( + exclude_fields=('prefix_count',), +) class NestedVRFSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vrf-detail') prefix_count = serializers.IntegerField(read_only=True) @@ -66,6 +70,9 @@ class NestedRouteTargetSerializer(WritableNestedSerializer): # RIRs/aggregates # +@extend_schema_serializer( + exclude_fields=('aggregate_count',), +) class NestedRIRSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:rir-detail') aggregate_count = serializers.IntegerField(read_only=True) @@ -108,6 +115,9 @@ class NestedFHRPGroupAssignmentSerializer(WritableNestedSerializer): # VLANs # +@extend_schema_serializer( + exclude_fields=('prefix_count', 'vlan_count'), +) class NestedRoleSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:role-detail') prefix_count = serializers.IntegerField(read_only=True) @@ -118,6 +128,9 @@ class NestedRoleSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display', 'name', 'slug', 'prefix_count', 'vlan_count'] +@extend_schema_serializer( + exclude_fields=('vlan_count',), +) class NestedVLANGroupSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlangroup-detail') vlan_count = serializers.IntegerField(read_only=True) diff --git a/netbox/tenancy/api/nested_serializers.py b/netbox/tenancy/api/nested_serializers.py index 2f95eca8c..d2d76d96c 100644 --- a/netbox/tenancy/api/nested_serializers.py +++ b/netbox/tenancy/api/nested_serializers.py @@ -1,3 +1,4 @@ +from drf_spectacular.utils import extend_schema_serializer from rest_framework import serializers from netbox.api.serializers import WritableNestedSerializer @@ -17,6 +18,9 @@ __all__ = [ # Tenants # +@extend_schema_serializer( + exclude_fields=('tenant_count',), +) class NestedTenantGroupSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:tenantgroup-detail') tenant_count = serializers.IntegerField(read_only=True) @@ -39,6 +43,9 @@ class NestedTenantSerializer(WritableNestedSerializer): # Contacts # +@extend_schema_serializer( + exclude_fields=('contact_count',), +) class NestedContactGroupSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='tenancy-api:contactgroup-detail') contact_count = serializers.IntegerField(read_only=True) diff --git a/netbox/virtualization/api/nested_serializers.py b/netbox/virtualization/api/nested_serializers.py index 07a9f5d13..8c3f57c1d 100644 --- a/netbox/virtualization/api/nested_serializers.py +++ b/netbox/virtualization/api/nested_serializers.py @@ -1,3 +1,4 @@ +from drf_spectacular.utils import extend_schema_serializer from rest_framework import serializers from netbox.api.serializers import WritableNestedSerializer @@ -16,6 +17,9 @@ __all__ = [ # +@extend_schema_serializer( + exclude_fields=('cluster_count',), +) class NestedClusterTypeSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustertype-detail') cluster_count = serializers.IntegerField(read_only=True) @@ -25,6 +29,9 @@ class NestedClusterTypeSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display', 'name', 'slug', 'cluster_count'] +@extend_schema_serializer( + exclude_fields=('cluster_count',), +) class NestedClusterGroupSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustergroup-detail') cluster_count = serializers.IntegerField(read_only=True) @@ -34,6 +41,9 @@ class NestedClusterGroupSerializer(WritableNestedSerializer): fields = ['id', 'url', 'display', 'name', 'slug', 'cluster_count'] +@extend_schema_serializer( + exclude_fields=('virtualmachine_count',), +) class NestedClusterSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:cluster-detail') virtualmachine_count = serializers.IntegerField(read_only=True) diff --git a/netbox/wireless/api/nested_serializers.py b/netbox/wireless/api/nested_serializers.py index 0e8404266..53f2a6354 100644 --- a/netbox/wireless/api/nested_serializers.py +++ b/netbox/wireless/api/nested_serializers.py @@ -1,3 +1,4 @@ +from drf_spectacular.utils import extend_schema_serializer from rest_framework import serializers from netbox.api.serializers import WritableNestedSerializer @@ -10,6 +11,9 @@ __all__ = ( ) +@extend_schema_serializer( + exclude_fields=('wirelesslan_count',), +) class NestedWirelessLANGroupSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='wireless-api:wirelesslangroup-detail') wirelesslan_count = serializers.IntegerField(read_only=True)