Return QuerySet as JSON?
我在Django1.8工作,很难找到现代的方法来做到这一点。
这就是我得到的,基于谷歌和这个博客帖子:
1 2 3 4 5
| results = PCT.objects.filter(code__startswith='a')
json_res = []
for result in results:
json_res.append(result.as_dict())
return HttpResponse(json.dumps(json_res), content_type='application/json') |
然而,这给了我一个(0)。
现在一定有更整洁的方法吗?
我想知道是否可以使用JSONResponse,但令人沮丧的是,文档没有给出如何将JSONResponse与查询集一起使用的示例,而查询集必须是最常见的用例。我尝试过:
1 2
| results = PCT.objects.filter(code__startswith='a')
return JsonResponse(results, safe=False) |
号
这给了[, ] is not JSON serializable。
- 使用django和python创建JSON响应的可能副本
- 但从2010年开始,事情肯定变得简单了吧?
- 他们当然有,这在重复问题的第一个答案中被引用。
- 好的,那么链接到这里:stackoverflow.com/questions/2428092/…,它显示了如何使用jsonresponse返回字典。但我有一个查询集,而不是字典。我正在尝试return JsonResponse(results.values(), safe=False),但这给了我一个TypeError: not JSON serializable。有什么想法吗?
- 我真的不想变得困难,但考虑到要转向前端应用程序,这似乎是人们在Django最想做的事情之一:我很惊讶很难弄明白怎么做。
- 如果您只想返回模型查询的结果作为GET的一部分,那么这听起来像是一个与REST兼容的调用。您看过REST框架吗?
- @mknecht看起来可能必须使用它,如果这是不可能的,但似乎有点重-我只需要一个简单的JSON方法,我可以用于自动完成字段,而不是一个完整的RESTful API。
- 我真的不认为这个问题是重复的:"重复"是古老的,是的,它有最近的更新,但更新是关于将字典转换为JSON,而不是查询集,所以这是完全不同的。
没有任何附加框架的最简单解决方案:
1 2
| results = PCT.objects.filter(code__startswith='a').values('id', 'name')
return JsonResponse({'results': list(results)}) |
返回{'results': [{'id': 1, 'name': 'foo'}, ...]}。
或者如果您只需要这些值:
1 2
| results = PCT.objects.filter(code__startswith='a').values_list('id', 'name')
return JsonResponse({'results': list(results)}) |
号
返回EDOCX1[1]
- 这么近!但第一个代码片段给出了以下错误消息:[{'code': u'5M1', 'name': u'South Birmingham'}, {'code': u'5M3', 'name': u'Walsall Teaching'}不是JSON可序列化的`。
- 这对我不起作用:(我用return JsonResponse({'results': list(results)})买了一个 is not JSON serializable。
使用values()返回querydict,并将其传递给json.dumps
1 2
| values = PCT.objects.filter(code__startswith='a').values()
return HttpResponse(json.dumps(values), content_type='application/json') |
https://docs.djangoproject.com/en/1.8/ref/models/queryset/值
- 但问题和其他答案一样:TypeError... is not JSON serializable。
- 奇怪的是,它应该起作用。stackoverflow.com/questions/25798395/python query dict to js‌&8203;on。可能尝试对值调用dict()方法。
看看Django的序列化框架。它不仅允许XML格式,还允许JSON和YAML。
- 谢谢,看完那页后,我找到了data = serializers.serialize("json", results)和return data,但这给了我一个有关unicode的错误信息。是否有缺步?