关于django:将QuerySet作为JSON返回?

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


没有任何附加框架的最简单解决方案:

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]


使用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/值


看看Django的序列化框架。它不仅允许XML格式,还允许JSON和YAML。