将QuerySet作为JSON返回?

时间:2015-05-14 17:01:52

标签: json django

我正在使用Django 1.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与查询集一起使用的示例,这必须是最常见的用例。我试过这个:

results = PCT.objects.filter(code__startswith='a')
return JsonResponse(results, safe=False)

这会给[<PCT: PCT object>, <PCT: PCT object>] is not JSON serializable

4 个答案:

答案 0 :(得分:18)

最简单的解决方案,没有任何额外的框架:

{'results': [{'id': 1, 'name': 'foo'}, ...]}

返回results = PCT.objects.filter(code__startswith='a').values_list('id', 'name') return JsonResponse({'results': list(results)})

或者如果您只需要值:

{'results': [[1, 'foo'], ...]}

返回{{1}}

答案 1 :(得分:4)

使用values()返回一个querydict,并将其传递给json.dumps

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/querysets/#values

答案 2 :(得分:0)

看看Django's serialization framework。它不仅允许XML格式,还允许JSON和YAML。

答案 3 :(得分:0)

这些答案大多数都已过时。这是我的用途:

views.py(返回HTML)

from django.shortcuts import render
from django.core import serializers

def your_view(request):
    data = serializers.serialize('json', YourModel.objects.all())
    context = {"data":data}
    return render(request, "your_view.html", context)

views.py(返回JSON)

from django.core import serializers
from django.http import HttpResponse

def your_view(request):
    data = serializers.serialize('json', YourModel.objects.all())
    return HttpResponse(data, content_type='application/json')