У меня есть 2 модели:Джанго Rest Framework не сериализовать SerializerMethodField
from django.db import models
STATUSES = (
('f', 'Finished'),
)
class Battery(models.Model):
energy = models.CharField(max_length=10)
current = models.CharField(max_length=10)
class Charger(models.Model):
status = models.CharField(max_length=1, choices=STATUSES)
И я хочу, чтобы создать сериалайзер, которые будут сериализуете 2 модели вместе. Мой serializers.py:
from rest_framework import serializers
from .models import Battery, Charger
class BatterySerializer(serializers.ModelSerializer):
class Meta:
model = Battery
class ChargerSerializer(serializers.ModelSerializer):
status = serializers.SerializerMethodField()
class Meta:
model = Charger
def get_status(self, obj):
return obj.get_status_display()
class DeviceSerializer(serializers.Serializer):
battery = BatterySerializer()
charger = ChargerSerializer()
some_field = serializers.CharField()
Поскольку зарядное устройство модель имеет выбор в поле статуса добавить SerializerMethodField для отображения полного статуса. Тогда я создать представление, как это:
class DeviceView(APIView):
def get(self, request, format=None):
battery = Battery.objects.get(id=1)
charger = Charger.objects.get(id=1)
battery_serializer = BatterySerializer(battery)
charger_serializer = ChargerSerializer(charger)
serializer = DeviceSerializer(data={
'battery': battery_serializer.data,
'charger': charger_serializer.data,
'some_field': 'some_text'
})
if serializer.is_valid():
return Response(serializer.validated_data)
else:
return Response(status = 500)
Но когда я называю это представление возвращает JSON с пустым полем зарядного устройства:
{
"battery": {
"energy": "12",
"current": "34"
},
"charger": {},
"some_field": "some_text"
}
Но когда я создать представление, что сериализации только зарядное устройство модель:
class ChargerView(APIView):
def get(self, request, format=None):
charger = Charger.objects.get(id=1)
charger_serializer = ChargerSerializer(charger)
return Response(charger_serializer.data)
он работает и возвращает этот JSON:
{
"id": 1,
"status": "Finished"
}
Почему это происходит? Где я совершил ошибку?
почему вы не можете назвать как' Аккумуляторы erializer' и 'ChargerSerializer' независимо от вашего зрения и вернуть их? Так как это делает ваш 'DeviceSerializer'. – dnit13
Как я могу вернуть их вместе? –
вот этот '{ 'батарея': батарея .__ dict__, 'charger': charger .__ dict__, 'some_field': 'some_text' }'? не уверен, что это правильный путь. – dnit13