試圖找出對我的資料建模的最佳方法。
我有一張口袋妖怪型別的桌子:
class PokemonTypesTest2(models.Model):
name = models.CharField(max_length=25, unique=True)
它只有一個 ID 和名稱,它將有 18 行。我希望能夠將多個表與它相關聯,例如下面的基本口袋妖怪模型(我清除了大部分資料以便更容易理解:
class BasePokemonTest2(models.Model):
#other data hidden #
type1 = models.ForeignKey(PokemonTypesTest2, on_delete=models.CASCADE, default=1)
type2 = models.ForeignKey(PokemonTypesTest2, on_delete=models.CASCADE, default=1)
type3 = models.ForeignKey(PokemonTypesTest2, on_delete=models.CASCADE, default=1)
weaknessResistanceImmune = models.ManyToManyField(PokemonTypesTest2, through='WeakResistImmune2')
我希望能夠將口袋妖怪打字與基本口袋妖怪表中的口袋妖怪聯系起來。
問題是我從 Django 得到這個錯誤:
ERRORS:
battlefield.BasePokemonTest2.type1: (fields.E304) Reverse accessor 'PokemonTypesTest2.basepokemontest2_set' for 'battlefield.BasePokemonTest2.type1' clashes with reverse accessor for 'battlefield.BasePokemonTest2.type2'.
HINT: Add or change a related_name argument to the definition for 'battlefield.BasePokemonTest2.type1' or 'battlefield.BasePokemonTest2.type2'.
我看到提示但不明白它的意思?
uj5u.com熱心網友回復:
使用 ForeignKey,如果您沒有通過指定“ related_name ”引數來覆寫默認值,那么 Django 將使用由源模型名稱 (PokemonTypesTest2) 小寫并附加“_set”組成的名稱。這使您可以訪問一個管理器,該管理器回傳與您的 BasePokemonTest2 實體相關的所有 PokemonTypesTest2 實體。例如
>>> p = BasePokemonTest2.objects.get(id=1)
>>> p.pokemontypestest2_set.all() # Returns all PokemonTypesTest2 objects related to BasePokemonTest2 instance
Django Docs:遵循“向后”的關系
因此,您在 BasePokemonTest2 模型中的 type1、type2 和 type3 分配都試圖命名為“basepokemontest2_set”。這是不允許的,因為每個相關名稱(在一個模型定義中)當然必須是唯一的。因此,來自 Django 的提示建議您使用 related_name 來解決沖突。
因此,要在上面的代碼中按您想要的方式作業,您需要以下內容:
type1 = models.ForeignKey(PokemonTypesTest2, on_delete=models.CASCADE, default=1, related_name="type1")
type2 = models.ForeignKey(PokemonTypesTest2, on_delete=models.CASCADE, default=1, related_name="type2")
type3 = models.ForeignKey(PokemonTypesTest2, on_delete=models.CASCADE, default=1, related_name="type3")
但是,我不認為這真的是你想要的嗎?我懷疑你可能只是想要:
type = models.ForeignKey(PokemonTypesTest2, on_delete=models.CASCADE, default=1)
(如果您不想要默認的 _set 名稱,您仍然可以在上面添加相關名稱(將其設定為任何您想要的名稱)。)
然后,您可以訪問與上述一個 BasePokemonTest2 相關的所有 PokemonTypesTest2。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/522617.html
上一篇:為多個值生成單獨的結果
