我一直在研究和瀏覽所有檔案,但我仍然有點困惑,我想可能是因為有多種方法可以使用 OnToOneField。
我有 4 個模型,Pregame、Ingame、Postgame 和 Game。我希望“游戲”包含其他三個模型。
截至目前,它看起來像這樣......
class Pregame(models.Model):
game_id = models.CharField(max_length=10)
other fields...
def __str__(self):
return str(self.game_id)
class Ingame(models.Model):
game_id = models.CharField(max_length=10)
other fields...
def __str__(self):
return str(self.game_id)
class Postgame(models.Model):
game_id = models.CharField(max_length=10)
other fields...
def __str__(self):
return str(self.game_id)
class Game(models.Model):
game_id = models.CharField(max_length=10)
pregame = models.OneToOneField(
Pregame, on_delete=models.CASCADE, null=True)
ingame = models.OneToOneField(
Ingame, on_delete=models.CASCADE, null=True)
postgame = models.OneToOneField(
Postgame, on_delete=models.CASCADE, null=True)
def __str__(self):
return str(self.game_id)
我使用 OnToOne 是因為每個游戲只有一個 Pregame、Ingame 和 Postgame,而其他三個模型只屬于一個 Game。
我有幾個問題我很困惑。
如果其他模型物件之一尚不存在,我能否擁有 Game 物件?就像如果有 Pregame 但沒有 Ingame 或 Postgame,那么 Game 是否仍然存在,其中只有 Pregame?我看過幾個視頻,他們做了一個 default='{}',這是我應該做的嗎?
每個模型都有 game_id,這就是我將它們全部連接到“游戲”物件中的方式。是否有像 game_id=game_id 這樣的 OneToOneField 選項,所以“游戲”模型會自動將所有模型鏈接在一起,還是我仍然需要單獨做?
感謝您的幫助和知識。
uj5u.com熱心網友回復:
首先,您不必game_id在 *game 物體上進行設定。您可以添加related_name:
class Game(models.Model):
game_id = models.CharField(max_length=10)
pregame = models.OneToOneField(
Pregame, on_delete=models.CASCADE, null=True, related_name="game")
ingame = models.OneToOneField(
Ingame, on_delete=models.CASCADE, null=True, related_name="game")
postgame = models.OneToOneField(
Postgame, on_delete=models.CASCADE, null=True, related_name="game")
class Pregame(models.Model):
other fields...
def __str__(self):
return str(self.game_id)
如果其他模型物件之一尚不存在,我能否擁有 Game 物件?就像如果有 Pregame 但沒有 Ingame 或 Postgame,那么 Game 是否仍然存在,其中只有 Pregame?我看過幾個視頻,他們做了一個 default='{}',這是我應該做的嗎?
是的,Game即使沒有 *game,物件也可以存在,正如您添加的那樣null=True。當您的模型不接受 null/空值時,您應該使用默認值。
每個模型都有 game_id,這就是我將它們全部連接到“游戲”物件中的方式。是否有像 game_id=game_id 這樣的 OneToOneField 選項,所以“游戲”模型會自動將所有模型鏈接在一起,還是我仍然需要單獨做?
創建此類模型后,您可以通過Game物體進行訪問。例如從去pregame到postgame:
postgame = pregame.game.postgame
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/430799.html
標籤:Python django PostgreSQL 模型 一对一
上一篇:Python回傳檔案中的變數
下一篇:將模型匯入視圖DJANGO失敗
