Мне нужен вложенный сериализатор в Django. У меня есть следующий сериализатор, который работает:
class LocationSerializer(serializers.ModelSerializer):
coordinate = serializers.SerializerMethodField()
message = serializers.SerializerMethodField()
def get_message(self, instance: models.Location):
if len(instance.message) > 1:
return instance.message
return None
def get_coordinate(self, instance: models.Location):
if instance.point:
return {"latitude": instance.point.y, "longitude": instance.point.x}
class Meta:
model = models.Location
fields = ('id', 'street', 'zip', 'phone', 'coordinate', 'message')
JSON, который производит этот сериализатор, должен быть обернут в объект json следующим образом:
{
"locations": //here comes the serialized data
}
Я попробовал его следующим образом с другимСериализатор, в котором указан сериализатор в поле:
class LocationResponseSerializer(serializers.Serializer):
locations = LocationSerializer(many=True)
Но когда я пытаюсь использовать этот сериализатор, я всегда получаю следующую ошибку:
The serializer field might be named incorrectly and not match any attribute or key on the `Location` instance.
Original exception text was: 'Location' object has no attribute 'locations'.
Что я делаю не так? Просто обернуть его в объект ответа работает, но это не решение, потому что, похоже, это не поддерживается фреймворками, которые работают с Django.
Спасибо за помощь!
Редактировать:Это метод списка с моей точки зрения:
def list(self, request, *args, **kwargs):
# update_compartments()
queryset = Location.objects.filter(hidden=False).all()
serializer = LocationResponseSerializer(queryset, many=True)
return Response(serializer.data)