将Django queryset输出为JSON

我想序列化我的查询集,并希望它以该视图输出的格式:

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()指定必填字段的列表,以避免序列化并将不必要的模型字段发送给客户端(您也可以传递fieldsserializers.serialize)

以上是 将Django queryset输出为JSON 的全部内容, 来源链接: utcz.com/qa/428585.html

回到顶部