Add an ASNSiteSerializer to allow serialization of Site in ASNSerializer

This commit is contained in:
Brian Tiemann
2025-12-16 13:52:34 -05:00
parent a364ee832d
commit d3f1e4a8bb

View File

@@ -1,7 +1,8 @@
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
@@ -41,9 +42,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 +72,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')