我想序列化我的查询集,并希望它以该视图输出的格式:
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)
;问题内容: 因此,我创建了一个新的gradle项目,选择Java作为“其他库和框架”。 Gradle将编译并维护程序包结构, 但是项目结构->模块中的“模块编译输出路径”设置为。 这确实很烦人,并不是我每次创建新的Java项目时都要更改的东西。 我可以以某种方式更改默认设置,使其与gradle输出路径匹配吗? 问题答案: 您可以将Gradle pluigin用于INtelliJ 在: 然后,当您运
问题内容: 我在理解如何利用docker的–format选项方面遇到一些困难。 例如,如果我运行“ docker images”,则会得到以下信息: 我想以JSON格式获取“ repo1”图像的结果。我找到了以下页面:https : //docs.docker.com/config/formatting/。对于“ json”示例,它提到使用“ go formatting”,但是提供的链接很难建立连
因此,我创建了一个新的gradle项目,选择Java作为“附加库和框架”。 Gradle将编译为<代码>。\构建\类并维护包结构, 但是项目结构中的“模块编译输出路径”—— 这真的很烦人,我不想每次创建一个新的Java项目时都要对其进行更改。 我是否可以更改默认值,使其与gradle输出路径匹配?
问题内容: 将从大型文本文件提取的列表中返回最大的列表,但是如何将输出存储为变量? 问题答案: 使用命令替换: 另外,出于可移植性考虑,我建议始终将用作参数。我遇到了一些无法使用的化身。
如何为新类别重新训练图像分类器中描述的脚本Retrain.py运行为 并生成输出文件。将此转换为
问题内容: 是否可以使用bash脚本将的输出格式化为json数组?为了成为有效的json,目录和文件的所有名称都必须用双引号引起来,并用逗号分隔,并且整个内容都必须用方括号括起来。即转换: 至 编辑:我非常喜欢可以在所有Linux服务器上使用的东西;因此,宁可不依赖python,而要使用纯bash解决方案。 问题答案: 使用perl作为编码器;保证它不会是越野车,到处都是,而且有了管道,它还是相当