将Django ValuesQuerySet转换为json obj

2024-06-09 14:39:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图使用Django中的ValuesQuerySet特性来限制从查询返回的字段数量,使之仅限于我需要的字段。我想将这个数据集序列化为一个JSON对象,但是Django一直抛出一个错误。以下是我的代码和收到的错误:

objectList = ConventionCard.objects.values('fileName','id').filter(ownerUser = user)
data = serializers.serialize('json', objectList)
return HttpResponse(data, mimetype='application/javascript')

错误:

Exception Type:     AttributeError
Exception Value:    'dict' object has no attribute '_meta'
Exception Location:     C:\Python27\lib\site-packages\django\core\serializers\base.py in serialize, line 41

谢谢!


Tags: 数据对象djangojsondata数量序列化错误
3条回答

首先将ValuesQuerySet强制转换为列表:

query_set = ConventionCard.objects.values('fileName','id').filter(ownerUser = user)

list(query_set)

按照ars的建议删除values调用将导致管理器从表中提取所有列,而不是只提取您需要的两列。

我继续得到一个dict对象在使用上面的list()方法时没有属性_meta错误。但是我发现this snippet有这个诀窍

def ValuesQuerySetToDict(vqs):
    return [item for item in vqs]

# Usage
data = MyModel.objects.values('id','title','...','...')
data_dict = ValuesQuerySetToDict(data)
data_json = simplejson.dumps(data_dict)

改为使用QuerySet通过serialize方法在值列表中尝试subsetting the fields

from django.core import serializers
objectQuerySet = ConventionCard.objects.filter(ownerUser = user)
data = serializers.serialize('json', objectQuerySet, fields=('fileName','id'))

相关问题 更多 >