我有一个querySet,我想将其转换为json并发送给客户端。
它仅需要定义的某些字段。
但是,“发件人”显示为id
,因为它是foreignKey
。
需要什么来返回发件人username
? (sender.username
不起作用)。 (不使用drf)
messages = Message.objects.all()
messages_json = serializers.serialize("json", messages, fields=('id','sender', 'text', 'timestamp'))
答案 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