我正在使用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
。
答案 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')