From d3f1e4a8bb74a08a426c64ac60dd9fac323f6952 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Tue, 16 Dec 2025 13:52:34 -0500 Subject: [PATCH] Add an ASNSiteSerializer to allow serialization of Site in ASNSerializer --- netbox/ipam/api/serializers_/asns.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/netbox/ipam/api/serializers_/asns.py b/netbox/ipam/api/serializers_/asns.py index 6325a3299..004543429 100644 --- a/netbox/ipam/api/serializers_/asns.py +++ b/netbox/ipam/api/serializers_/asns.py @@ -1,7 +1,8 @@ from rest_framework import serializers +from dcim.models import Site 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 tenancy.api.serializers_.tenants import TenantSerializer @@ -41,9 +42,27 @@ class ASNRangeSerializer(OrganizationalModelSerializer): 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): rir = RIRSerializer(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 site_count = RelatedObjectCountField('sites') @@ -53,7 +72,7 @@ class ASNSerializer(PrimaryModelSerializer): model = ASN fields = [ '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')