я пытаюсь загрузить связанный набор в сериализатор, поэтому записи будут отображаться как вложенный словарь под родительским.
У меня в настоящее время нет ошибок, но мой API также не возвращает никаких данных для circuitits_subnets.
есть идеи?
Спасибо
EDIT
Я добавил вложенный сериализатор, однако API по-прежнему не показывает ошибок и данных
views.py:
class DeviceConnViewSet(viewsets.ReadOnlyModelViewSet):
# sub queries
poll_ip = Subquery(
DeviceCircuitSubnets.objects.filter(device_id=OuterRef(
'id'),subnet__subnet_type__poll=True).values('subnet__subnet')[:1])
mgmt_ip = Subquery(
DeviceCircuitSubnets.objects.filter(device_id=OuterRef(
'id'),subnet__subnet_type__mgmt=True).values('subnet__subnet')[:1])
queryset = Device.objects.all().annotate(
poll_ip=poll_ip,
mgmt_ip=mgmt_ip
) \
.select_related('site','site__site_type','model','model__device_type') \
.prefetch_related('devicecircuitsubnets_set') \
.order_by('site__location')
serializer_class = DeviceConn
serializers.py
class CircuitSubnetsSerializer(serializers.ModelSerializer):
circuit_name = serializers.ReadOnlyField(
source='circuit.name',
)
subnet = serializers.ReadOnlyField(
source='subnet.subnet',
)
subnet_mask = serializers.ReadOnlyField(
source='subnet.mask',
)
subnet_type = serializers.ReadOnlyField(
source='subnet.subnet_type.subnet_type',
)
class Meta:
model = DeviceCircuitSubnets
fields = ('circuit_name', 'subnet','subnet_mask','subnet_type')
class DeviceConn(QueryFieldsMixin, serializers.HyperlinkedModelSerializer):
poll_ip = serializers.ReadOnlyField()
mgmt_ip = serializers.ReadOnlyField()
bgp_as = serializers.ReadOnlyField(
source='site.bgp_as',
)
location = serializers.ReadOnlyField(
source='site.location',
)
site_type = serializers.ReadOnlyField(
source='site.site_type.site_type',
)
device_type = serializers.ReadOnlyField(
source='model.device_type.device_type_plural',
)
circuit_subnets = CircuitSubnetsSerializer(many=True, read_only=True)
class Meta:
model = Device
fields = ('site_id','poll_ip','mgmt_ip','bgp_as','hostname', 'device_type','location','site_type','circuit_subnets')
Пример вывода API
{
"site_id": 50,
"poll_ip": null,
"mgmt_ip": "10.10.10.1",
"bgp_as": "65001",
"hostname": "STR-LDN-SW-02",
"device_type": "Switches",
"location": "Lonon",
"site_type": "Showroom"
},