Django序列化器获取相关字段

时间:2019-03-21 10:55:17

标签: django

我有一个querySet,我想将其转换为json并发送给客户端。 它仅需要定义的某些字段。 但是,“发件人”显示为id,因为它是foreignKey

需要什么来返回发件人username? (sender.username不起作用)。 (不使用drf)

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

2 个答案:

答案 0 :(得分:1)

未经测试,但使用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)

答案 1 :(得分:0)

我想我已经找到了一种方法,所以我会自己回答

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是orderedDict,因此仅当没有嵌套对象/字典时才将其转换为json