我想序列化我的查询集,并希望它以该视图输出的格式:
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内置序列化器的另一种方法:
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, ... } }, ... ]
我不得不说,使用像棉花糖之类的东西来序列化queryset 是一个好习惯。
…以及一些提高性能的注意事项:
objects.values()
fields
serializers.serialize)