我想序列化我的查询集,并且我希望它采用此 View 输出的格式:
class JSONListView(ListView):
queryset = Users.objects.all()
def get(self, request, *args, **kwargs):
return HttpResponse(json.dumps({'data': [['bar','foo','bar','foo'],['foo','bar','foo','bar']]}, indent=4), content_type='application/json')
我只是不知道如何输出查询集而不是示例中的手动数据。
我试过了
json.dumps({"data": self.get_queryset()})
和
serializers.serialize("json", {'data': self.get_queryset()})
但它不会工作。我究竟做错了什么?我需要制作自定义 JSON 编码器吗?
最佳答案
您可以使用 JsonResponse与 values .简单例子:
from django.http import JsonResponse
def some_view(request):
data = list(SomeModel.objects.values()) # wrap in list(), because QuerySet is not JSON serializable
return JsonResponse(data, safe=False) # or JsonResponse({'data': data})
或使用 Django's built-in serializers 的另一种方法:
from django.core import serializers
from django.http import HttpResponse
def some_view(request):
qs = SomeModel.objects.all()
qs_json = serializers.serialize('json', qs)
return HttpResponse(qs_json, content_type='application/json')
在这种情况下,结果略有不同(默认没有缩进):
[
{
"model": "some_app.some_model",
"pk": 1,
"fields": {
"name": "Elon",
"age": 48,
...
}
},
...
]
我不得不说,使用 marshmallow 之类的东西是个好习惯序列化查询集。
...以及一些说明以获得更好的性能:
objects.values()
指定所需字段的列表,以避免序列化和发送给客户端不必要的模型字段(您也可以将 fields
传递给 serializers .serialize
);https://stackoverflow.com/questions/15874233/
相关文章:
json - 如何在所有子项中查询具有特定值的属性的firebase
django - 使用 django 测试客户端发送 JSON
ajax - 为什么 jqXHR.responseText 返回字符串而不是 JSON 对象?
java - Gson 将一组数据对象转换为 json - Android
javascript - 如何在 JSON 中存储 javascript 函数
json - Newtonsoft 对象 → 获取 JSON 字符串
javascript - Flask:单击按钮下载 csv 文件
java - 如何在 Eclipse 中导入 javax.json