【发布时间】:2020-01-21 17:55:27
【问题描述】:
我正在尝试使用return JsonResponse() 使以下视图最终正常工作:
def get_data(request):
full_data = Fund.objects.all()
data = {
"test2": full_data.values('investment_strategy').annotate(sum=Sum('commitment')),
}
return JsonResponse(data)
但是,我收到一条错误消息,提示“QuerySet 类型的对象不是 JSON 可序列化的”。
当我把上面的 Queryset 放在一个最后带有 return render() 的视图中时:
def get_more_data(request):
full_data = Fund.objects.all()
data = {"test2": full_data.values('investment_strategy').annotate(sum=Sum('commitment'))}
return render (request, 'test.html', data)
我得到以下结果:<QuerySet [{'investment_strategy': 'Buyout', 'sum': 29}, {'investment_strategy': 'Growth', 'sum': 13}, {'investment_strategy': 'Miscellaneous', 'sum': 14}, {'investment_strategy': 'Venture Capital', 'sum': 23}, {'investment_strategy': 'n/a', 'sum': 36}]>
所以查询集工作正常,我只是不知道如何以正确的 Json 格式返回数据(我需要使用数据 charts.js)
我查看了类似问题的答案,例如: TypeError: object is not JSON serializable in DJango 1.8 Python 3.4 Output Django queryset as JSON 等等。 但无法为我的问题找到有意义的解决方案。
任何帮助将不胜感激!
【问题讨论】:
-
JsonResponse(list(data))将评估 Queryset(实际执行对数据库的查询)并将其转换为可以传递给JsonResponse的列表。这是因为您使用了values和annotate,所以该列表是包含可序列化字段的字典列表。
标签: json django django-views django-queryset