class ServiceSerializer(CustomFieldModelSerializer): device = NestedDeviceSerializer(required=False, allow_null=True) virtual_machine = NestedVirtualMachineSerializer(required=False, allow_null=True) protocol = ChoiceField(choices=ServiceProtocolChoices) ipaddresses = SerializedPKRelatedField( queryset=IPAddress.objects.all(), serializer=NestedIPAddressSerializer, required=False, many=True) class Meta: model = Service fields = [ 'id', 'device', 'virtual_machine', 'name', 'port', 'protocol', 'ipaddresses', 'description', 'custom_fields', 'created', 'last_updated', ]
class ServiceSerializer(PrimaryModelSerializer): url = serializers.HyperlinkedIdentityField( view_name='ipam-api:service-detail') device = NestedDeviceSerializer(required=False, allow_null=True) virtual_machine = NestedVirtualMachineSerializer(required=False, allow_null=True) protocol = ChoiceField(choices=ServiceProtocolChoices, required=False) ipaddresses = SerializedPKRelatedField( queryset=IPAddress.objects.all(), serializer=NestedIPAddressSerializer, required=False, many=True) class Meta: model = Service fields = [ 'id', 'url', 'display', 'device', 'virtual_machine', 'name', 'ports', 'protocol', 'ipaddresses', 'description', 'tags', 'custom_fields', 'created', 'last_updated', ]
class IPAddressInterfaceSerializer(WritableNestedSerializer): """ Nested representation of an Interface which may belong to a Device *or* a VirtualMachine. """ url = serializers.SerializerMethodField( ) # We're imitating a HyperlinkedIdentityField here device = NestedDeviceSerializer(read_only=True) virtual_machine = NestedVirtualMachineSerializer(read_only=True) class Meta: model = Interface fields = [ 'id', 'url', 'device', 'virtual_machine', 'name', ] def get_url(self, obj): """ Return a link to the Interface via either the DCIM API if the parent is a Device, or via the virtualization API if the parent is a VirtualMachine. """ url_name = 'dcim-api:interface-detail' if obj.device else 'virtualization-api:interface-detail' return reverse(url_name, kwargs={'pk': obj.pk}, request=self.context['request'])
class ProxmoxVMSerializer(serializers.ModelSerializer): """Serializer for the ProxmoxVM model.""" cluster = NestedClusterSerializer( # set relationship type to many-to-one many=False, # the field is allowed as the input in API calls read_only=False, # specifies whether field is required. # it must follow the corresponding property set for the model field required=False, help_text="ProxmoxVM Cluster" ) virtual_machine = NestedVirtualMachineSerializer( many=False, read_only=False, required=True, help_text="ProxmoxVM Virtual Machine" ) class Meta: model = ProxmoxVM fields = [ "id", "cluster", "virtual_machine", "proxmox_vm_id", "status", "node", "vcpus", "memory", "disk", "type", "description", ]