我的安装包含许多模块,每个模块都有许多版本。
α-LA:
class Module(Models.Model):
install = models.ForeignKey(Install)
One Install有很多模块。
我想将整个集合序列化为json结构。
我发现我可以使用wad of stuff serializer以这种方式序列化:
serializers.serialize("json", Version.objects.all(), indent=4,
relations={'module':{'relations':('install',)}})
但这是从内到外开始的(多对一视图 - 许多版本都有一个模块,但我想知道每个模块有哪些版本)。我在顶层获得了版本列表,每个版本都调用了它的模块,因此每个模块都列出了很多次:
[
{
"pk": 1,
"model": "cmh_server.version",
"fields": {
"name": "v1",
"module": {
"pk": 1,
"model": "cmh_server.module",
"fields": {
"install": {
"pk": 1,
"model": "cmh_server.install",
"fields": {
"name": "CMBN"
}
},
"name": "CMBN",
}
}
},
"pk": 2,
"model": "cmh_server.version",
"fields": {
"name": "v1.1",
"module": {
"pk": 1,
"model": "cmh_server.module",
"fields": {
"install": {
"pk": 1,
"model": "cmh_server.install",
"fields": {
"name": "CMBN"
}
},
"name": "CMBN",
}
}
}
}
]
查看同一模块如何列出两次。那是“不对”。
我想说点什么
serializers.serialize("json", Install.objects.all(), indent=4,
relations={'module':{'relations':('version',)}})
但当然这不起作用,因为Install模型没有名为“module”的字段。
答案 0 :(得分:3)
您可以尝试使用django rest framework。
为模块模型和版本模型定义模型序列化程序:
class VersionSerializer(serializers.ModelSerializer):
class Meta:
model = Version
class ModuleSerializer(serializers.ModelSerializer):
versions = VersionSerializer(many=True)
class Meta:
model = Module
fields = ('id', ..... , 'versions')
现在定义您的Install model serialiser:
class InstallSerializer(serializers.ModelSerializer):
modules = ModuleSerializer(many=True)
class Meta:
model = Install
fields = ('id', ..... , 'modules')
这将序列化每个安装的所有模块的安装数据,以及安装中每个模块的所有版本。
编辑:
我忘了提到这一点,相关模型字段的名称应该与外键字段中的related_name值相同。
例如,在模块模型中:
class Module(Models.Model):
install = models.ForeignKey(Install, related_name='modules')
现在你必须使用' modules'作为序列化程序中字段的名称。