我正在Django1.8中工作,但很难找到现代的方法来完成这项工作。
这是我得到的,基于谷歌搜索和this blog post:
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')
但是,这会得到'PCT' object has no attribute 'as_dict'
。
现在肯定有更好的办法了吧?
我想知道是否有可能使用JSONResponse,但令人沮丧的是,文档没有给予如何使用JSONRespose和queryset的示例,这肯定是最常见的用例。
results = PCT.objects.filter(code__startswith='a')
return JsonResponse(results, safe=False)
这样就得到了[<PCT: PCT object>, <PCT: PCT object>] is not JSON serializable
。
5条答案
按热度按时间vu8f3i0k1#
最简单的解决方案,无需任何附加框架:
返回
{'results': [{'id': 1, 'name': 'foo'}, ...]}
或者如果您只需要值:
返回
{'results': [[1, 'foo'], ...]}
7gyucuyw2#
使用values()返回一个查询字典,并将其传递给json.dumps
https://docs.djangoproject.com/en/1.8/ref/models/querysets/#values
qmelpv7a3#
这些答案大多已经过时了,我用的是:
视图.py(返回HTML)
视图.py(返回JSON)
egdjgwm84#
看看Django's serialization framework,它不仅支持XML格式,还支持JSON和YAML。
7fyelxc55#
使用
JsonResponse
的accepted answer很好也很简单,但是它不返回完整的对象。另一种方法是使用Django的
serializers
,下面是一个从管理操作文档中逐字复制的示例:这与Django的
JsonResponse
非常相似,可以在源代码中看到。主要区别在于
JsonResponse
直接调用json.dumps()
,并且不知道如何处理查询集,而上面的示例使用serializers.serialize('json', ...)
,它知道如何处理查询集,并且返回完整的对象,这些对象也可以在以后反序列化。如果要直接保存到文件(使用
content-disposition: attachment
在浏览器中打开保存对话框),可以使用FileResponse
,例如: