我有一个有许多字段的模型,但是对于这个问题,我只需要这些字段中的3个。当我试图序列化一个.values
集时,我得到了一个异常:
'dict‘对象没有属性'_meta’
这是我的代码:
queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = serializers.serialize('json', queryset, ensure_ascii=False)
发布于 2011-10-05 00:02:15
Django序列化程序只能序列化queryset,values()
不返回queryset而是ValuesQuerySet
对象。所以,避免使用values()
。相反,在serialize方法中指定您希望在values()
中使用的字段,如下所示:
以下面的SO question为例
objectQuerySet = ConventionCard.objects.filter(ownerUser = user)
data = serializers.serialize('json', list(objectQuerySet), fields=('fileName','id'))
不使用objectQuerySet.values('fileName','id')
,而是使用serializers.serialize()
的fields
参数指定这些字段,如下所示。
发布于 2015-08-14 00:52:43
正如其他人所说,Django的serializers不能处理ValuesQuerySet。但是,您可以使用标准json.dumps()
进行序列化,并使用list()
将ValuesQuerySet转换为列表。如果您的set包含Django字段,例如小数,则需要传入DjangoJSONEncoder。因此:
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)
发布于 2013-11-29 15:47:09
从objectQuerySet创建列表:
data_ready_for_json = list( ConventionCard.objects.filter(ownerUser = user).values('fileName','id') )
https://stackoverflow.com/questions/7650448
复制相似问题