Обернуть сериализатор Django в другой сериализатор - PullRequest
0 голосов
/ 10 октября 2019

Мне нужен вложенный сериализатор в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...