1
我有許多模塊,其中每個都有許多版本的安裝。序列化爲json嵌套的一對多(相對於多對一)
一拉:
class Module(Models.Model):
install = models.ForeignKey(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',)}})
當然,因爲安裝模型沒有一個所謂的「模塊」字段不工作的。
這看起來很有吸引力。主要的缺點似乎是,如果類本身被修改,這些seralizer類必須被修改,對嗎?我的意思是 - 字段列表將不得不手動更新? – GreenAsJade
要在模型序列化程序中包含一個字段,該字段不是模型中的實際字段,您需要明確定義Meta類中的字段屬性。爲了避免列出模型序列化程序的實際字段,可以使用Model._meta.fields生成模型字段的名稱列表。這樣您就不必擔心手動更新fields屬性。 –
我猜InstallSerializer中的模型應該是Install?當我嘗試'我= Install.objects.get(pk = 1); Installserializer(i).data'我得到「AttributeError:'安裝'對象沒有屬性'模塊' 」 – GreenAsJade