diff --git a/netbox/circuits/api/serializers.py b/netbox/circuits/api/serializers.py index 56395547d..26f57d000 100644 --- a/netbox/circuits/api/serializers.py +++ b/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 diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index 9cae166eb..e513a64de 100644 --- a/netbox/dcim/api/serializers.py +++ b/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 diff --git a/netbox/extras/api/customfields.py b/netbox/extras/api/customfields.py new file mode 100644 index 000000000..0def1a554 --- /dev/null +++ b/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'] \ No newline at end of file diff --git a/netbox/extras/api/serializers.py b/netbox/extras/api/serializers.py index 8e767fbef..76088bf3c 100644 --- a/netbox/extras/api/serializers.py +++ b/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 diff --git a/netbox/ipam/api/serializers.py b/netbox/ipam/api/serializers.py index 75b47b6ca..c33694d88 100644 --- a/netbox/ipam/api/serializers.py +++ b/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, diff --git a/netbox/tenancy/api/serializers.py b/netbox/tenancy/api/serializers.py index bde86ee28..67231fe67 100644 --- a/netbox/tenancy/api/serializers.py +++ b/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