Сериализатор Django получить связанное поле - PullRequest
0 голосов
/ 21 марта 2019

У меня есть набор запросов, который я хочу превратить в json и отправить клиенту. Для этого нужны только некоторые поля, как определено. Тем не менее, «отправитель» отображается как id, потому что это foreignKey.

Что потребуется для возврата отправителей username? (sender.username не работает). (Без использования drf)

messages = Message.objects.all()
messages_json = serializers.serialize("json", messages, fields=('id','sender', 'text', 'timestamp'))

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Не проверено, но использование QuerySet.values и __ обхода отношений позволяет получить данные одним нажатием:

import json

messages = Message.objects.all()
payload_data = messages.values('id', 'sender__username', 'text', 'timestamp')

# tidy up the dict key names, assuming the client needs that doing
for x in payload_data:
    x['sender'] = x['sender__username']
    del x['sender__username']

messages_json = json.dumps(payload_data)
0 голосов
/ 21 марта 2019

Думаю, я нашел способ, поэтому сам отвечу

from django.core.serializers.python import Serializer

class MySerialiser(Serializer):
    def end_object( self, obj ):
        self._current['username'] = obj.sender.username
        self.objects.append(self._current)

serializer = MySerialiser()
messages_ser  = serializer.serialize(messages, fields=('id','sender','text' ))
messages_json = json.dumps(messages_ser)

messages_ser - заказанный документ, поэтому его преобразование в json работает только при отсутствии вложенных объектов / диктов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...