JSON序列化Django Queryset时调用的值有什么问题吗?

7 投票
1 回答
10382 浏览
提问于 2025-04-16 23:30

这里有个问题: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 函数是个不错的选择。

撰写回答