Parcourir la source

Moved custom field serializers to their own module to avoid circular dependency

Jeremy Stretch il y a 8 ans
Parent
commit
a6ceaf8d96

+ 1 - 1
netbox/circuits/api/serializers.py

@@ -2,7 +2,7 @@ from rest_framework import serializers
 
 from circuits.models import Provider, Circuit, CircuitTermination, CircuitType
 from dcim.api.serializers import NestedSiteSerializer, InterfaceSerializer
-from extras.api.serializers import CustomFieldModelSerializer
+from extras.api.customfields import CustomFieldModelSerializer
 from tenancy.api.serializers import NestedTenantSerializer
 
 

+ 1 - 1
netbox/dcim/api/serializers.py

@@ -8,7 +8,7 @@ from dcim.models import (
     PowerPortTemplate, Rack, RackGroup, RackReservation, RackRole, RACK_FACE_CHOICES, RACK_TYPE_CHOICES,
     RACK_WIDTH_CHOICES, Region, Site, STATUS_CHOICES, SUBDEVICE_ROLE_CHOICES,
 )
-from extras.api.serializers import CustomFieldModelSerializer
+from extras.api.customfields import CustomFieldModelSerializer
 from tenancy.api.serializers import NestedTenantSerializer
 from utilities.api import ChoiceFieldSerializer
 

+ 45 - 0
netbox/extras/api/customfields.py

@@ -0,0 +1,45 @@
+from django.contrib.contenttypes.models import ContentType
+
+from rest_framework import serializers
+
+from extras.models import CustomField, CustomFieldChoice
+
+
+#
+# Custom fields
+#
+
+class CustomFieldSerializer(serializers.BaseSerializer):
+    """
+    Extends ModelSerializer to render any CustomFields and their values associated with an object.
+    """
+
+    def to_representation(self, manager):
+
+        # Initialize custom fields dictionary
+        data = {f.name: None for f in self.parent._custom_fields}
+
+        # Assign CustomFieldValues from database
+        for cfv in manager.all():
+            data[cfv.field.name] = cfv.value
+
+        return data
+
+
+class CustomFieldModelSerializer(serializers.ModelSerializer):
+    custom_fields = CustomFieldSerializer(source='custom_field_values')
+
+    def __init__(self, *args, **kwargs):
+
+        super(CustomFieldModelSerializer, self).__init__(*args, **kwargs)
+
+        # Cache the list of custom fields for this model
+        content_type = ContentType.objects.get_for_model(self.Meta.model)
+        self._custom_fields = CustomField.objects.filter(obj_type=content_type)
+
+
+class CustomFieldChoiceSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = CustomFieldChoice
+        fields = ['id', 'value']

+ 4 - 46
netbox/extras/api/serializers.py

@@ -1,49 +1,7 @@
-from django.contrib.contenttypes.models import ContentType
-
 from rest_framework import serializers
 
-# from dcim.api.serializers import NestedSiteSerializer
-from extras.models import CustomField, CustomFieldChoice, Graph, TopologyMap
-
-
-#
-# Custom fields
-#
-
-class CustomFieldSerializer(serializers.BaseSerializer):
-    """
-    Extends ModelSerializer to render any CustomFields and their values associated with an object.
-    """
-
-    def to_representation(self, manager):
-
-        # Initialize custom fields dictionary
-        data = {f.name: None for f in self.parent._custom_fields}
-
-        # Assign CustomFieldValues from database
-        for cfv in manager.all():
-            data[cfv.field.name] = cfv.value
-
-        return data
-
-
-class CustomFieldModelSerializer(serializers.ModelSerializer):
-    custom_fields = CustomFieldSerializer(source='custom_field_values')
-
-    def __init__(self, *args, **kwargs):
-
-        super(CustomFieldModelSerializer, self).__init__(*args, **kwargs)
-
-        # Cache the list of custom fields for this model
-        content_type = ContentType.objects.get_for_model(self.Meta.model)
-        self._custom_fields = CustomField.objects.filter(obj_type=content_type)
-
-
-class CustomFieldChoiceSerializer(serializers.ModelSerializer):
-
-    class Meta:
-        model = CustomFieldChoice
-        fields = ['id', 'value']
+from dcim.api.serializers import NestedSiteSerializer
+from extras.models import Graph, TopologyMap
 
 
 #
@@ -69,8 +27,8 @@ class GraphSerializer(serializers.ModelSerializer):
 # Topology maps
 #
 
-class TopologyMapSerializer(CustomFieldModelSerializer):
-    # site = NestedSiteSerializer()
+class TopologyMapSerializer(serializers.ModelSerializer):
+    site = NestedSiteSerializer()
 
     class Meta:
         model = TopologyMap

+ 1 - 1
netbox/ipam/api/serializers.py

@@ -1,7 +1,7 @@
 from rest_framework import serializers
 
 from dcim.api.serializers import NestedDeviceSerializer, InterfaceSerializer, NestedSiteSerializer
-from extras.api.serializers import CustomFieldModelSerializer
+from extras.api.customfields import CustomFieldModelSerializer
 from ipam.models import (
     Aggregate, IPAddress, IPADDRESS_STATUS_CHOICES, IP_PROTOCOL_CHOICES, Prefix, PREFIX_STATUS_CHOICES, RIR, Role,
     Service, VLAN, VLAN_STATUS_CHOICES, VLANGroup, VRF,

+ 1 - 1
netbox/tenancy/api/serializers.py

@@ -1,6 +1,6 @@
 from rest_framework import serializers
 
-from extras.api.serializers import CustomFieldModelSerializer
+from extras.api.customfields import CustomFieldModelSerializer
 from tenancy.models import Tenant, TenantGroup