我无法将ValuesQuerySet对象序列化为json数据,我发现了这个差距的多种解决方案,但是这种情况不同,因为我需要遵循外键值。
from task_manager.models import UserTasks
data=UserTasks.objects.filter(user__username="root",server_id=2).values("server_id__mnemonic")
上一个查询返回如下内容:
>>> print data
[{'server_id__mnemonic': u'lol'}, {'server_id__mnemonic': u'lol'}, {'server_id__mnemonic': u'lol'},.......]
但是当我尝试将其序列化为JSON格式时,会引发下一个异常:
>>> json_data = serializers.serialize('json',data)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:\Python27\lib\site-packages\django\core\serializers\__init__.py", line 122, in serialize
s.serialize(queryset, **options)
File "C:\Python27\lib\site-packages\django\core\serializers\base.py", line 45, in serialize
concrete_model = obj._meta.concrete_model
AttributeError: 'dict' object has no attribute '_meta'
>>> type(data)
<class 'django.db.models.query.ValuesQuerySet'>
我在官方Django手册中找到了says:的解决方案如果您只想序列化一个字段子集,可以为序列化器指定一个fields参数:
from django.core import serializers
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))
但是使用这段代码,我无法获得我想要的外键值。
由于
答案 0 :(得分:4)
values()
为您提供ValuesQuerySet
,您可以将其转换为list
并使用json
模块进行序列化,无需在此处涉及Django serializers
:
import json
from task_manager.models import UserTasks
data = UserTasks.objects.filter(user__username="root",server_id=2).values("server_id__mnemonic")
print json.dumps(list(data))
另一个选项是使用serializers.serialize()
并指定fields
参数:
data = UserTasks.objects.filter(user__username="root",server_id=2)
print serializers.serialize('json', data, fields=('server_id__mnemonic', ))