mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Moved custom field serializers to their own module to avoid circular dependency
This commit is contained in:
@ -2,7 +2,7 @@ from rest_framework import serializers
|
|||||||
|
|
||||||
from circuits.models import Provider, Circuit, CircuitTermination, CircuitType
|
from circuits.models import Provider, Circuit, CircuitTermination, CircuitType
|
||||||
from dcim.api.serializers import NestedSiteSerializer, InterfaceSerializer
|
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
|
from tenancy.api.serializers import NestedTenantSerializer
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ from dcim.models import (
|
|||||||
PowerPortTemplate, Rack, RackGroup, RackReservation, RackRole, RACK_FACE_CHOICES, RACK_TYPE_CHOICES,
|
PowerPortTemplate, Rack, RackGroup, RackReservation, RackRole, RACK_FACE_CHOICES, RACK_TYPE_CHOICES,
|
||||||
RACK_WIDTH_CHOICES, Region, Site, STATUS_CHOICES, SUBDEVICE_ROLE_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 tenancy.api.serializers import NestedTenantSerializer
|
||||||
from utilities.api import ChoiceFieldSerializer
|
from utilities.api import ChoiceFieldSerializer
|
||||||
|
|
||||||
|
45
netbox/extras/api/customfields.py
Normal file
45
netbox/extras/api/customfields.py
Normal file
@ -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']
|
@ -1,49 +1,7 @@
|
|||||||
from django.contrib.contenttypes.models import ContentType
|
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
# from dcim.api.serializers import NestedSiteSerializer
|
from dcim.api.serializers import NestedSiteSerializer
|
||||||
from extras.models import CustomField, CustomFieldChoice, Graph, TopologyMap
|
from extras.models import 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']
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -69,8 +27,8 @@ class GraphSerializer(serializers.ModelSerializer):
|
|||||||
# Topology maps
|
# Topology maps
|
||||||
#
|
#
|
||||||
|
|
||||||
class TopologyMapSerializer(CustomFieldModelSerializer):
|
class TopologyMapSerializer(serializers.ModelSerializer):
|
||||||
# site = NestedSiteSerializer()
|
site = NestedSiteSerializer()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TopologyMap
|
model = TopologyMap
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from dcim.api.serializers import NestedDeviceSerializer, InterfaceSerializer, NestedSiteSerializer
|
from dcim.api.serializers import NestedDeviceSerializer, InterfaceSerializer, NestedSiteSerializer
|
||||||
from extras.api.serializers import CustomFieldModelSerializer
|
from extras.api.customfields import CustomFieldModelSerializer
|
||||||
from ipam.models import (
|
from ipam.models import (
|
||||||
Aggregate, IPAddress, IPADDRESS_STATUS_CHOICES, IP_PROTOCOL_CHOICES, Prefix, PREFIX_STATUS_CHOICES, RIR, Role,
|
Aggregate, IPAddress, IPADDRESS_STATUS_CHOICES, IP_PROTOCOL_CHOICES, Prefix, PREFIX_STATUS_CHOICES, RIR, Role,
|
||||||
Service, VLAN, VLAN_STATUS_CHOICES, VLANGroup, VRF,
|
Service, VLAN, VLAN_STATUS_CHOICES, VLANGroup, VRF,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from extras.api.serializers import CustomFieldModelSerializer
|
from extras.api.customfields import CustomFieldModelSerializer
|
||||||
from tenancy.models import Tenant, TenantGroup
|
from tenancy.models import Tenant, TenantGroup
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user