具有ManyToMany字段的QuerySet上的值()的输出 [英] Output of values() on a QuerySet with ManyToMany fields

查看:16
本文介绍了具有ManyToMany字段的QuerySet上的值()的输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我当前正在将QuerySet的结果放入JSON字符串中,以供我的js前端使用。

目前,使用.values()和simplejson:

很容易做到这一点
simplejson.dumps(list(Task.objects.filter(list=mylist).values()))

我现在已在Task对象中添加了ManyToMany字段,希望将其包含在输出中,而不会让每个Task对象对ManyToMany关系的每个值重复。

如果我刚才这样做了Task.objects.filter(list=mylist).values('myManyToManyField', 'someOtherField')myManyToManyField的每个值都会有一个单独的对象/行

[{'myManyToManyField': 1, 'someOtherField': 'valueOne'}, 
{'myManyToManyField': 2, 'someOtherField': 'valueOne'},
{'myManyToManyField': 1, 'someOtherField': 'valueTwo'}]

有没有办法获得此结果?:

[{'myManyToManyField': [1,2], 'someOtherField': 'valueOne'},
{'myManyToManyField': 1, 'someOtherField': 'valueTwo'}]
我现在唯一的解决方案是遍历所有Task对象并手动构建输出,根据需要将ManyToMany值放入其中。有没有更好的方法来做这件事?如果不是,这会不会是非常低效的?

推荐答案

您可以使用django的序列化程序:

import json
from django.core import serializers

json_data = serializers.serialize("json", Task.objects.all())

如果您只想提取字段,请执行以下操作:

data = [i['fields'] for i in json.loads(json_data)]

这篇关于具有ManyToMany字段的QuerySet上的值()的输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆