首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Django queryset.values()序列化为json?

如何将Django queryset.values()序列化为json?
EN

Stack Overflow用户
提问于 2011-10-04 23:39:09
回答 5查看 74.5K关注 0票数 40

我有一个有许多字段的模型,但是对于这个问题,我只需要这些字段中的3个。当我试图序列化一个.values集时,我得到了一个异常:

'dict‘对象没有属性'_meta’

这是我的代码:

代码语言:javascript
运行
复制
queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = serializers.serialize('json', queryset, ensure_ascii=False)
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-10-05 00:02:15

Django序列化程序只能序列化queryset,values()不返回queryset而是ValuesQuerySet对象。所以,避免使用values()。相反,在serialize方法中指定您希望在values()中使用的字段,如下所示:

以下面的SO question为例

代码语言:javascript
运行
复制
objectQuerySet = ConventionCard.objects.filter(ownerUser = user)
data = serializers.serialize('json', list(objectQuerySet), fields=('fileName','id'))

不使用objectQuerySet.values('fileName','id'),而是使用serializers.serialize()fields参数指定这些字段,如下所示。

票数 37
EN

Stack Overflow用户

发布于 2015-08-14 00:52:43

正如其他人所说,Django的serializers不能处理ValuesQuerySet。但是,您可以使用标准json.dumps()进行序列化,并使用list()将ValuesQuerySet转换为列表。如果您的set包含Django字段,例如小数,则需要传入DjangoJSONEncoder。因此:

代码语言:javascript
运行
复制
import json
from django.core.serializers.json import DjangoJSONEncoder

queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = json.dumps(list(queryset), cls=DjangoJSONEncoder)
票数 46
EN

Stack Overflow用户

发布于 2013-11-29 15:47:09

从objectQuerySet创建列表:

代码语言:javascript
运行
复制
data_ready_for_json = list( ConventionCard.objects.filter(ownerUser = user).values('fileName','id') )
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7650448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档