Просмотр исходного кода

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

bctiemann 1 месяц назад
Родитель
Сommit
a28269b73a
1 измененных файлов с 22 добавлено и 2 удалено
  1. 22 2
      netbox/ipam/api/serializers_/asns.py

+ 22 - 2
netbox/ipam/api/serializers_/asns.py

@@ -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')