Django设置两个模型之间的关系



我想将我的自定义模型保存为另一个模型中的字段,如下所示。这是正常的,当我在一个会话中创造和工作。但是当我开始一个新的会话时,Django会加载游戏模型,其中player1和player2的id为空。

下面是我的代码示例

class Player(models.Model):
name = models.CharField(max_length=40)
class Game(models.Model):
player1 = Player()
player2 = Player()

看你的评论。我想这就是你想要的。

class Player(models.Model):
name = models.CharField(max_length=40)
class Game(models.Model):
player1 = models.OneToOneField(Player, on_delete=models.CASCADE, related_name='p1_game')
player2 = models.OneToOneField(Player, on_delete=models.CASCADE, related_name='p2_game')

您需要使用外键:

from django.contrib.gis.db import models
class Player(models.Model):
name = models.CharField(max_length=40)
class Game(models.Model):
player1 = models.ForeignKey(Player, on_delete=models.CASCADE)
player2 = models.ForeignKey(Player, on_delete=models.CASCADE)

参见on_delete在Django模型上做什么?获取有关on_delete参数的信息。

你需要创建一个外键,这是django实现多对一关系的方式:

class Game(models.Model):
player1 = models.ForeignKey(Player, on_delete=models.CASCADE, related_name="p1game")
player2 = models.ForeignKey(Player, on_delete=models.CASCADE, related_name="p2game")

不要忘记makemigrationsmigrate!