将django的ValuesQuerySet转换为json对象
我正在尝试在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
谢谢!
4 个回答
14
我在使用上面提到的 list()
方法时,持续遇到一个错误,提示 dict
对象没有 _meta
这个属性。不过,我找到了一段可以解决这个问题的代码,链接在这里:这段代码
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)
35
首先把ValuesQuerySet转换成一个列表:
query_set = ConventionCard.objects.values('fileName','id').filter(ownerUser = user)
list(query_set)
按照ars的建议去掉values
这个调用,会导致管理器从表中拉取所有的列,而不仅仅是你需要的那两列。
18
试试通过使用 QuerySet 的 serialize
方法来对你的值列表进行字段的子集选择,具体可以参考这个链接。
from django.core import serializers
objectQuerySet = ConventionCard.objects.filter(ownerUser = user)
data = serializers.serialize('json', objectQuerySet, fields=('fileName','id'))