1

我无法将 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 手册中找到了一个解决方案,上面写着如果您只想序列化字段的子集,您可以为序列化程序指定一个 fields 参数:

from django.core import serializers
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))

但是使用这段代码,我无法获得我想要的外键值。

谢谢

4

1 回答 1

4

values()为您提供一个您可以通过将其转换为 a并使用模块ValuesQuerySet来序列化的内容,此处无需涉及 Django :listjsonserializers

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', ))
于 2014-06-24T15:24:59.960 回答