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

Renamed ChoiceFieldSerializer and ContentTypeFieldSerializer

Jeremy Stretch 7 лет назад
Родитель
Сommit
c2416411c1

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

@@ -8,7 +8,7 @@ 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.customfields 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, TagField, ValidatedModelSerializer, WritableNestedSerializer
+from utilities.api import ChoiceField, TagField, ValidatedModelSerializer, WritableNestedSerializer
 
 
 
 
 #
 #
@@ -59,7 +59,7 @@ class NestedCircuitTypeSerializer(WritableNestedSerializer):
 
 
 class CircuitSerializer(CustomFieldModelSerializer):
 class CircuitSerializer(CustomFieldModelSerializer):
     provider = NestedProviderSerializer()
     provider = NestedProviderSerializer()
-    status = ChoiceFieldSerializer(choices=CIRCUIT_STATUS_CHOICES, required=False)
+    status = ChoiceField(choices=CIRCUIT_STATUS_CHOICES, required=False)
     type = NestedCircuitTypeSerializer()
     type = NestedCircuitTypeSerializer()
     tenant = NestedTenantSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)

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

@@ -20,7 +20,7 @@ from ipam.models import IPAddress, VLAN
 from tenancy.api.serializers import NestedTenantSerializer
 from tenancy.api.serializers import NestedTenantSerializer
 from users.api.serializers import NestedUserSerializer
 from users.api.serializers import NestedUserSerializer
 from utilities.api import (
 from utilities.api import (
-    ChoiceFieldSerializer, SerializedPKRelatedField, TagField, TimeZoneField, ValidatedModelSerializer,
+    ChoiceField, SerializedPKRelatedField, TagField, TimeZoneField, ValidatedModelSerializer,
     WritableNestedSerializer,
     WritableNestedSerializer,
 )
 )
 from virtualization.models import Cluster
 from virtualization.models import Cluster
@@ -51,7 +51,7 @@ class RegionSerializer(serializers.ModelSerializer):
 #
 #
 
 
 class SiteSerializer(CustomFieldModelSerializer):
 class SiteSerializer(CustomFieldModelSerializer):
-    status = ChoiceFieldSerializer(choices=SITE_STATUS_CHOICES, required=False)
+    status = ChoiceField(choices=SITE_STATUS_CHOICES, required=False)
     region = NestedRegionSerializer(required=False, allow_null=True)
     region = NestedRegionSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
     time_zone = TimeZoneField(required=False)
     time_zone = TimeZoneField(required=False)
@@ -123,8 +123,8 @@ class RackSerializer(CustomFieldModelSerializer):
     group = NestedRackGroupSerializer(required=False, allow_null=True)
     group = NestedRackGroupSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
     role = NestedRackRoleSerializer(required=False, allow_null=True)
     role = NestedRackRoleSerializer(required=False, allow_null=True)
-    type = ChoiceFieldSerializer(choices=RACK_TYPE_CHOICES, required=False)
-    width = ChoiceFieldSerializer(choices=RACK_WIDTH_CHOICES, required=False)
+    type = ChoiceField(choices=RACK_TYPE_CHOICES, required=False)
+    width = ChoiceField(choices=RACK_WIDTH_CHOICES, required=False)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
 
 
     class Meta:
     class Meta:
@@ -222,8 +222,8 @@ class NestedManufacturerSerializer(WritableNestedSerializer):
 
 
 class DeviceTypeSerializer(CustomFieldModelSerializer):
 class DeviceTypeSerializer(CustomFieldModelSerializer):
     manufacturer = NestedManufacturerSerializer()
     manufacturer = NestedManufacturerSerializer()
-    interface_ordering = ChoiceFieldSerializer(choices=IFACE_ORDERING_CHOICES, required=False)
-    subdevice_role = ChoiceFieldSerializer(choices=SUBDEVICE_ROLE_CHOICES, required=False)
+    interface_ordering = ChoiceField(choices=IFACE_ORDERING_CHOICES, required=False)
+    subdevice_role = ChoiceField(choices=SUBDEVICE_ROLE_CHOICES, required=False)
     instance_count = serializers.IntegerField(source='instances.count', read_only=True)
     instance_count = serializers.IntegerField(source='instances.count', read_only=True)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
 
 
@@ -299,7 +299,7 @@ class PowerOutletTemplateSerializer(ValidatedModelSerializer):
 
 
 class InterfaceTemplateSerializer(ValidatedModelSerializer):
 class InterfaceTemplateSerializer(ValidatedModelSerializer):
     device_type = NestedDeviceTypeSerializer()
     device_type = NestedDeviceTypeSerializer()
-    form_factor = ChoiceFieldSerializer(choices=IFACE_FF_CHOICES, required=False)
+    form_factor = ChoiceField(choices=IFACE_FF_CHOICES, required=False)
 
 
     class Meta:
     class Meta:
         model = InterfaceTemplate
         model = InterfaceTemplate
@@ -396,8 +396,8 @@ class DeviceSerializer(CustomFieldModelSerializer):
     platform = NestedPlatformSerializer(required=False, allow_null=True)
     platform = NestedPlatformSerializer(required=False, allow_null=True)
     site = NestedSiteSerializer()
     site = NestedSiteSerializer()
     rack = NestedRackSerializer(required=False, allow_null=True)
     rack = NestedRackSerializer(required=False, allow_null=True)
-    face = ChoiceFieldSerializer(choices=RACK_FACE_CHOICES, required=False)
-    status = ChoiceFieldSerializer(choices=DEVICE_STATUS_CHOICES, required=False)
+    face = ChoiceField(choices=RACK_FACE_CHOICES, required=False)
+    status = ChoiceField(choices=DEVICE_STATUS_CHOICES, required=False)
     primary_ip = DeviceIPAddressSerializer(read_only=True)
     primary_ip = DeviceIPAddressSerializer(read_only=True)
     primary_ip4 = DeviceIPAddressSerializer(required=False, allow_null=True)
     primary_ip4 = DeviceIPAddressSerializer(required=False, allow_null=True)
     primary_ip6 = DeviceIPAddressSerializer(required=False, allow_null=True)
     primary_ip6 = DeviceIPAddressSerializer(required=False, allow_null=True)
@@ -571,12 +571,12 @@ class InterfaceVLANSerializer(WritableNestedSerializer):
 
 
 class InterfaceSerializer(ValidatedModelSerializer):
 class InterfaceSerializer(ValidatedModelSerializer):
     device = NestedDeviceSerializer()
     device = NestedDeviceSerializer()
-    form_factor = ChoiceFieldSerializer(choices=IFACE_FF_CHOICES, required=False)
+    form_factor = ChoiceField(choices=IFACE_FF_CHOICES, required=False)
     lag = NestedInterfaceSerializer(required=False, allow_null=True)
     lag = NestedInterfaceSerializer(required=False, allow_null=True)
     is_connected = serializers.SerializerMethodField(read_only=True)
     is_connected = serializers.SerializerMethodField(read_only=True)
     interface_connection = serializers.SerializerMethodField(read_only=True)
     interface_connection = serializers.SerializerMethodField(read_only=True)
     circuit_termination = InterfaceCircuitTerminationSerializer(read_only=True)
     circuit_termination = InterfaceCircuitTerminationSerializer(read_only=True)
-    mode = ChoiceFieldSerializer(choices=IFACE_MODE_CHOICES, required=False)
+    mode = ChoiceField(choices=IFACE_MODE_CHOICES, required=False)
     untagged_vlan = InterfaceVLANSerializer(required=False, allow_null=True)
     untagged_vlan = InterfaceVLANSerializer(required=False, allow_null=True)
     tagged_vlans = SerializedPKRelatedField(
     tagged_vlans = SerializedPKRelatedField(
         queryset=VLAN.objects.all(),
         queryset=VLAN.objects.all(),
@@ -684,7 +684,7 @@ class InventoryItemSerializer(ValidatedModelSerializer):
 class InterfaceConnectionSerializer(ValidatedModelSerializer):
 class InterfaceConnectionSerializer(ValidatedModelSerializer):
     interface_a = NestedInterfaceSerializer()
     interface_a = NestedInterfaceSerializer()
     interface_b = NestedInterfaceSerializer()
     interface_b = NestedInterfaceSerializer()
-    connection_status = ChoiceFieldSerializer(choices=CONNECTION_STATUS_CHOICES, required=False)
+    connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, required=False)
 
 
     class Meta:
     class Meta:
         model = InterfaceConnection
         model = InterfaceConnection
@@ -704,7 +704,7 @@ class ContextualInterfaceConnectionSerializer(serializers.ModelSerializer):
     A read-only representation of an InterfaceConnection from the perspective of either of its two connected Interfaces.
     A read-only representation of an InterfaceConnection from the perspective of either of its two connected Interfaces.
     """
     """
     interface = serializers.SerializerMethodField(read_only=True)
     interface = serializers.SerializerMethodField(read_only=True)
-    connection_status = ChoiceFieldSerializer(choices=CONNECTION_STATUS_CHOICES, read_only=True)
+    connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
 
 
     class Meta:
     class Meta:
         model = InterfaceConnection
         model = InterfaceConnection

+ 6 - 6
netbox/extras/api/serializers.py

@@ -16,7 +16,7 @@ from extras.constants import *
 from tenancy.api.serializers import NestedTenantSerializer, NestedTenantGroupSerializer
 from tenancy.api.serializers import NestedTenantSerializer, NestedTenantGroupSerializer
 from users.api.serializers import NestedUserSerializer
 from users.api.serializers import NestedUserSerializer
 from utilities.api import (
 from utilities.api import (
-    ChoiceFieldSerializer, ContentTypeFieldSerializer, get_serializer_for_model, ValidatedModelSerializer,
+    ChoiceField, ContentTypeField, get_serializer_for_model, ValidatedModelSerializer,
 )
 )
 
 
 
 
@@ -25,7 +25,7 @@ from utilities.api import (
 #
 #
 
 
 class GraphSerializer(ValidatedModelSerializer):
 class GraphSerializer(ValidatedModelSerializer):
-    type = ChoiceFieldSerializer(choices=GRAPH_TYPE_CHOICES)
+    type = ChoiceField(choices=GRAPH_TYPE_CHOICES)
 
 
     class Meta:
     class Meta:
         model = Graph
         model = Graph
@@ -35,7 +35,7 @@ class GraphSerializer(ValidatedModelSerializer):
 class RenderedGraphSerializer(serializers.ModelSerializer):
 class RenderedGraphSerializer(serializers.ModelSerializer):
     embed_url = serializers.SerializerMethodField()
     embed_url = serializers.SerializerMethodField()
     embed_link = serializers.SerializerMethodField()
     embed_link = serializers.SerializerMethodField()
-    type = ChoiceFieldSerializer(choices=GRAPH_TYPE_CHOICES)
+    type = ChoiceField(choices=GRAPH_TYPE_CHOICES)
 
 
     class Meta:
     class Meta:
         model = Graph
         model = Graph
@@ -88,7 +88,7 @@ class TagSerializer(ValidatedModelSerializer):
 #
 #
 
 
 class ImageAttachmentSerializer(ValidatedModelSerializer):
 class ImageAttachmentSerializer(ValidatedModelSerializer):
-    content_type = ContentTypeFieldSerializer()
+    content_type = ContentTypeField()
     parent = serializers.SerializerMethodField(read_only=True)
     parent = serializers.SerializerMethodField(read_only=True)
 
 
     class Meta:
     class Meta:
@@ -188,7 +188,7 @@ class ReportDetailSerializer(ReportSerializer):
 
 
 class ObjectChangeSerializer(serializers.ModelSerializer):
 class ObjectChangeSerializer(serializers.ModelSerializer):
     user = NestedUserSerializer(read_only=True)
     user = NestedUserSerializer(read_only=True)
-    content_type = ContentTypeFieldSerializer(read_only=True)
+    content_type = ContentTypeField(read_only=True)
     changed_object = serializers.SerializerMethodField(read_only=True)
     changed_object = serializers.SerializerMethodField(read_only=True)
 
 
     class Meta:
     class Meta:
@@ -217,7 +217,7 @@ class ObjectChangeSerializer(serializers.ModelSerializer):
 
 
 class UserActionSerializer(serializers.ModelSerializer):
 class UserActionSerializer(serializers.ModelSerializer):
     user = NestedUserSerializer()
     user = NestedUserSerializer()
-    action = ChoiceFieldSerializer(choices=ACTION_CHOICES)
+    action = ChoiceField(choices=ACTION_CHOICES)
 
 
     class Meta:
     class Meta:
         model = UserAction
         model = UserAction

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

@@ -16,7 +16,7 @@ from ipam.constants import (
 from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
 from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
 from tenancy.api.serializers import NestedTenantSerializer
 from tenancy.api.serializers import NestedTenantSerializer
 from utilities.api import (
 from utilities.api import (
-    ChoiceFieldSerializer, SerializedPKRelatedField, TagField, ValidatedModelSerializer, WritableNestedSerializer,
+    ChoiceField, SerializedPKRelatedField, TagField, ValidatedModelSerializer, WritableNestedSerializer,
 )
 )
 from virtualization.api.serializers import NestedVirtualMachineSerializer
 from virtualization.api.serializers import NestedVirtualMachineSerializer
 
 
@@ -151,7 +151,7 @@ class VLANSerializer(CustomFieldModelSerializer):
     site = NestedSiteSerializer(required=False, allow_null=True)
     site = NestedSiteSerializer(required=False, allow_null=True)
     group = NestedVLANGroupSerializer(required=False, allow_null=True)
     group = NestedVLANGroupSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
-    status = ChoiceFieldSerializer(choices=VLAN_STATUS_CHOICES, required=False)
+    status = ChoiceField(choices=VLAN_STATUS_CHOICES, required=False)
     role = NestedRoleSerializer(required=False, allow_null=True)
     role = NestedRoleSerializer(required=False, allow_null=True)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
 
 
@@ -195,7 +195,7 @@ class PrefixSerializer(CustomFieldModelSerializer):
     vrf = NestedVRFSerializer(required=False, allow_null=True)
     vrf = NestedVRFSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
     vlan = NestedVLANSerializer(required=False, allow_null=True)
     vlan = NestedVLANSerializer(required=False, allow_null=True)
-    status = ChoiceFieldSerializer(choices=PREFIX_STATUS_CHOICES, required=False)
+    status = ChoiceField(choices=PREFIX_STATUS_CHOICES, required=False)
     role = NestedRoleSerializer(required=False, allow_null=True)
     role = NestedRoleSerializer(required=False, allow_null=True)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
 
 
@@ -257,8 +257,8 @@ class IPAddressInterfaceSerializer(serializers.ModelSerializer):
 class IPAddressSerializer(CustomFieldModelSerializer):
 class IPAddressSerializer(CustomFieldModelSerializer):
     vrf = NestedVRFSerializer(required=False, allow_null=True)
     vrf = NestedVRFSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
-    status = ChoiceFieldSerializer(choices=IPADDRESS_STATUS_CHOICES, required=False)
-    role = ChoiceFieldSerializer(choices=IPADDRESS_ROLE_CHOICES, required=False)
+    status = ChoiceField(choices=IPADDRESS_STATUS_CHOICES, required=False)
+    role = ChoiceField(choices=IPADDRESS_ROLE_CHOICES, required=False)
     interface = IPAddressInterfaceSerializer(required=False, allow_null=True)
     interface = IPAddressInterfaceSerializer(required=False, allow_null=True)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
     tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
 
 
@@ -304,7 +304,7 @@ class AvailableIPSerializer(serializers.Serializer):
 class ServiceSerializer(CustomFieldModelSerializer):
 class ServiceSerializer(CustomFieldModelSerializer):
     device = NestedDeviceSerializer(required=False, allow_null=True)
     device = NestedDeviceSerializer(required=False, allow_null=True)
     virtual_machine = NestedVirtualMachineSerializer(required=False, allow_null=True)
     virtual_machine = NestedVirtualMachineSerializer(required=False, allow_null=True)
-    protocol = ChoiceFieldSerializer(choices=IP_PROTOCOL_CHOICES)
+    protocol = ChoiceField(choices=IP_PROTOCOL_CHOICES)
     ipaddresses = SerializedPKRelatedField(
     ipaddresses = SerializedPKRelatedField(
         queryset=IPAddress.objects.all(),
         queryset=IPAddress.objects.all(),
         serializer=NestedIPAddressSerializer,
         serializer=NestedIPAddressSerializer,

+ 3 - 4
netbox/utilities/api.py

@@ -63,7 +63,6 @@ class TagField(RelatedField):
     """
     """
     Represent a writable list of Tags associated with an object (use with many=True).
     Represent a writable list of Tags associated with an object (use with many=True).
     """
     """
-
     def to_internal_value(self, data):
     def to_internal_value(self, data):
         obj = self.parent.parent.instance
         obj = self.parent.parent.instance
         content_type = ContentType.objects.get_for_model(obj)
         content_type = ContentType.objects.get_for_model(obj)
@@ -74,7 +73,7 @@ class TagField(RelatedField):
         return value.name
         return value.name
 
 
 
 
-class ChoiceFieldSerializer(Field):
+class ChoiceField(Field):
     """
     """
     Represent a ChoiceField as {'value': <DB value>, 'label': <string>}.
     Represent a ChoiceField as {'value': <DB value>, 'label': <string>}.
     """
     """
@@ -87,7 +86,7 @@ class ChoiceFieldSerializer(Field):
                     self._choices[k2] = v2
                     self._choices[k2] = v2
             else:
             else:
                 self._choices[k] = v
                 self._choices[k] = v
-        super(ChoiceFieldSerializer, self).__init__(**kwargs)
+        super(ChoiceField, self).__init__(**kwargs)
 
 
     def to_representation(self, obj):
     def to_representation(self, obj):
         return {'value': obj, 'label': self._choices[obj]}
         return {'value': obj, 'label': self._choices[obj]}
@@ -96,7 +95,7 @@ class ChoiceFieldSerializer(Field):
         return data
         return data
 
 
 
 
-class ContentTypeFieldSerializer(Field):
+class ContentTypeField(Field):
     """
     """
     Represent a ContentType as '<app_label>.<model>'
     Represent a ContentType as '<app_label>.<model>'
     """
     """

+ 2 - 2
netbox/utilities/custom_inspectors.py

@@ -3,7 +3,7 @@ from drf_yasg.inspectors import FieldInspector, NotHandled, PaginatorInspector,
 from rest_framework.fields import ChoiceField
 from rest_framework.fields import ChoiceField
 
 
 from extras.api.customfields import CustomFieldsSerializer
 from extras.api.customfields import CustomFieldsSerializer
-from utilities.api import ChoiceFieldSerializer
+from utilities.api import ChoiceField
 
 
 
 
 class CustomChoiceFieldInspector(FieldInspector):
 class CustomChoiceFieldInspector(FieldInspector):
@@ -12,7 +12,7 @@ class CustomChoiceFieldInspector(FieldInspector):
         # https://drf-yasg.readthedocs.io/en/stable/_modules/drf_yasg/inspectors/base.html#FieldInspector._get_partial_types
         # https://drf-yasg.readthedocs.io/en/stable/_modules/drf_yasg/inspectors/base.html#FieldInspector._get_partial_types
         SwaggerType, _ = self._get_partial_types(field, swagger_object_type, use_references, **kwargs)
         SwaggerType, _ = self._get_partial_types(field, swagger_object_type, use_references, **kwargs)
 
 
-        if isinstance(field, ChoiceFieldSerializer):
+        if isinstance(field, ChoiceField):
             value_schema = openapi.Schema(type=openapi.TYPE_INTEGER)
             value_schema = openapi.Schema(type=openapi.TYPE_INTEGER)
 
 
             choices = list(field._choices.keys())
             choices = list(field._choices.keys())

+ 3 - 3
netbox/virtualization/api/serializers.py

@@ -9,7 +9,7 @@ from dcim.models import Interface
 from extras.api.customfields import CustomFieldModelSerializer
 from extras.api.customfields import CustomFieldModelSerializer
 from ipam.models import IPAddress, VLAN
 from ipam.models import IPAddress, VLAN
 from tenancy.api.serializers import NestedTenantSerializer
 from tenancy.api.serializers import NestedTenantSerializer
-from utilities.api import ChoiceFieldSerializer, TagField, ValidatedModelSerializer, WritableNestedSerializer
+from utilities.api import ChoiceField, TagField, ValidatedModelSerializer, WritableNestedSerializer
 from virtualization.constants import VM_STATUS_CHOICES
 from virtualization.constants import VM_STATUS_CHOICES
 from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine
 from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine
 
 
@@ -91,7 +91,7 @@ class VirtualMachineIPAddressSerializer(serializers.ModelSerializer):
 
 
 
 
 class VirtualMachineSerializer(CustomFieldModelSerializer):
 class VirtualMachineSerializer(CustomFieldModelSerializer):
-    status = ChoiceFieldSerializer(choices=VM_STATUS_CHOICES, required=False)
+    status = ChoiceField(choices=VM_STATUS_CHOICES, required=False)
     cluster = NestedClusterSerializer(required=False, allow_null=True)
     cluster = NestedClusterSerializer(required=False, allow_null=True)
     role = NestedDeviceRoleSerializer(required=False, allow_null=True)
     role = NestedDeviceRoleSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
     tenant = NestedTenantSerializer(required=False, allow_null=True)
@@ -145,7 +145,7 @@ class InterfaceVLANSerializer(serializers.ModelSerializer):
 
 
 class InterfaceSerializer(serializers.ModelSerializer):
 class InterfaceSerializer(serializers.ModelSerializer):
     virtual_machine = NestedVirtualMachineSerializer()
     virtual_machine = NestedVirtualMachineSerializer()
-    mode = ChoiceFieldSerializer(choices=IFACE_MODE_CHOICES)
+    mode = ChoiceField(choices=IFACE_MODE_CHOICES)
     untagged_vlan = InterfaceVLANSerializer()
     untagged_vlan = InterfaceVLANSerializer()
     tagged_vlans = InterfaceVLANSerializer(many=True)
     tagged_vlans = InterfaceVLANSerializer(many=True)