我有以下代码:
class Game(models.Model):
title = models.CharField(max_length=50)
summery = models.CharField(max_length=500)
key = models.IntegerField()
pin = models.CharField(max_length=12)
complete = models.BooleanField()
invite_sent = models.DateTimeField()
on = models.ForeignKey(Member, blank = True) #<----
class Member(models.Model):
email = models.CharField(max_length=100)
color = models.CharField(max_length=11)
game = models.ForeignKey(Game) #<----
“on”外键链接到其中一个成员(转为它)。游戏的所有成员都将他们的“游戏”外键设置为他们所在的游戏。问题是Django不会让我在声明它之前引用它,因为我不能同时声明它们......
编辑:为了清理,这是一个例子。如果有五个成员玩一个游戏,那么所有五个游戏都有外键。另一方面,游戏将有一个外键给特定成员转过来。
答案 0 :(得分:34)
Django documentation for the ForeignKey field州:
如果需要在尚未定义的模型上创建关系,可以使用模型的名称,而不是模型对象本身。
所以在你的情况下,那将是:
class Game(models.Model):
# Other fields...
on = models.ForeignKey('Member', blank = True)
class Member(models.Model):
# Other fields...
game = models.ForeignKey(Game)
答案 1 :(得分:8)
您不需要让两个模型使用外键相互引用。删除行:
on = models.ForeignKey(Member, blank = True) #<----
逻辑上你的Member
仍将与不同的Game
相关联(这更有意义,因为一个成员一次可以属于一个游戏,而游戏可以拥有更多不止一个成员)。
您可以使用reverse relation找出特定游戏中的成员。