Closes: #20930 - Add an ASNSiteSerializer to allow serialization of Site in ASNSerializer (#20991)

This commit is contained in:
bctiemann
2025-12-17 12:18:51 -05:00
committed by GitHub
parent 44e731a40a
commit a28269b73a

View File

@@ -1,13 +1,15 @@
from rest_framework import serializers from rest_framework import serializers
from dcim.models import Site
from ipam.models import ASN, ASNRange, RIR from ipam.models import ASN, ASNRange, RIR
from netbox.api.fields import RelatedObjectCountField from netbox.api.fields import RelatedObjectCountField, SerializedPKRelatedField
from netbox.api.serializers import OrganizationalModelSerializer, PrimaryModelSerializer from netbox.api.serializers import OrganizationalModelSerializer, PrimaryModelSerializer
from tenancy.api.serializers_.tenants import TenantSerializer from tenancy.api.serializers_.tenants import TenantSerializer
__all__ = ( __all__ = (
'ASNRangeSerializer', 'ASNRangeSerializer',
'ASNSerializer', 'ASNSerializer',
'ASNSiteSerializer',
'AvailableASNSerializer', 'AvailableASNSerializer',
'RIRSerializer', 'RIRSerializer',
) )
@@ -41,9 +43,27 @@ class ASNRangeSerializer(OrganizationalModelSerializer):
brief_fields = ('id', 'url', 'display', 'name', 'description') brief_fields = ('id', 'url', 'display', 'name', 'description')
class ASNSiteSerializer(PrimaryModelSerializer):
"""
This serializer is meant for inclusion in ASNSerializer and is only used
to avoid a circular import of SiteSerializer.
"""
class Meta:
model = Site
fields = ('id', 'url', 'display', 'name', 'description', 'slug')
brief_fields = ('id', 'url', 'display', 'name', 'description', 'slug')
class ASNSerializer(PrimaryModelSerializer): class ASNSerializer(PrimaryModelSerializer):
rir = RIRSerializer(nested=True, required=False, allow_null=True) rir = RIRSerializer(nested=True, required=False, allow_null=True)
tenant = TenantSerializer(nested=True, required=False, allow_null=True) tenant = TenantSerializer(nested=True, required=False, allow_null=True)
sites = SerializedPKRelatedField(
queryset=Site.objects.all(),
serializer=ASNSiteSerializer,
nested=True,
required=False,
many=True
)
# Related object counts # Related object counts
site_count = RelatedObjectCountField('sites') site_count = RelatedObjectCountField('sites')
@@ -53,7 +73,7 @@ class ASNSerializer(PrimaryModelSerializer):
model = ASN model = ASN
fields = [ fields = [
'id', 'url', 'display_url', 'display', 'asn', 'rir', 'tenant', 'description', 'owner', 'comments', 'tags', 'id', 'url', 'display_url', 'display', 'asn', 'rir', 'tenant', 'description', 'owner', 'comments', 'tags',
'custom_fields', 'created', 'last_updated', 'site_count', 'provider_count', 'custom_fields', 'created', 'last_updated', 'site_count', 'provider_count', 'sites',
] ]
brief_fields = ('id', 'url', 'display', 'asn', 'description') brief_fields = ('id', 'url', 'display', 'asn', 'description')