JSON序列化Django Queryset时调用的值有什么问题吗?
这里有个问题:Django的序列化工具不支持字典,而simplejson又不支持Django的查询集。你可以查看这个链接了解更多信息:用simplejson序列化Django模型
我在想我的解决方案有没有什么问题。我有类似这样的代码:
people = People.objects.all().values('name', 'id')
json.dumps(list(people))
我还是Python/Django的新手。把QuerySet
转换成列表是个坏主意吗?使用另一个话题中提到的DjangoJSONEncoder
会更有效吗?
1 个回答
13
我觉得你的解决方案完全有效,而且非常简洁。
如果你需要的是一个列表里面再包含列表(而不是字典的列表),你也可以这样做:
from django.utils import simplejson
people = People.objects.all().values_list('name', 'id')
simplejson.dumps(list(people))
有时候,当json输出非常复杂时,我们通常会使用一个json模板配合 *render_to_string* 函数,比如:
context = {'people': People.objects.all().values('name', 'id')}
render_to_string('templates/people.json', context, context_instance=RequestContext(request))
模板 people.json 可能是这样的:
[
{% for person in people %}
{"name": {{ person.name }}, "id": {{ person.id }} }
{% if not forloop.last %} , {% endif %}
{% endfor %}
]
不过,使用模板一般是针对比你这个问题更复杂的情况。我觉得对于简单的问题,使用 simplejson.dumps 函数是个不错的选择。