我正在Django 1.8中工作,无法找到实现此目标的现代方法。
这是我在Googling和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
。 最佳答案
最简单的解决方案,无需任何其他框架:
results = PCT.objects.filter(code__startswith='a').values('id', 'name')
return JsonResponse({'results': list(results)})
返回
{'results': [{'id': 1, 'name': 'foo'}, ...]}
或者,如果您只需要这些值:
results = PCT.objects.filter(code__startswith='a').values_list('id', 'name')
return JsonResponse({'results': list(results)})
返回
{'results': [[1, 'foo'], ...]}