Как иметь две модели, ссылки друг на друга Django
У меня есть следующий код:
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 не позволит мне ссылаться на класс до его объявления, и поскольку я не могу объявить их одновременно...
Изменить: Чтобы прояснить ситуацию, вот пример. Если бы в игре участвовало пять человек, у всех пяти были бы внешние ключи к игре. У игры, с другой стороны, был бы один внешний ключ для конкретного участника, который его включил.
Ответы
Ответ 1
Документация Django для поля ForeignKey:
Если вам нужно создать отношение к модели, которая еще не определена, вы можете использовать имя модели, а не сам объект модели.
Итак, в вашем случае это будет:
class Game(models.Model):
# Other fields...
on = models.ForeignKey('Member', blank = True)
class Member(models.Model):
# Other fields...
game = models.ForeignKey(Game)
Ответ 2
Вам не нужно, чтобы две модели ссылались друг на друга с внешними ключами. Удалите строку:
on = models.ForeignKey(Member, blank = True) #<----
и логически ваш Member
по-прежнему будет связан с разными Game
(и это имеет большее значение, потому что член может принадлежать к одной игре за раз, тогда как игра может иметь более одного члена).
Вы можете использовать обратное отношение, чтобы выяснить, какие члены находятся в конкретной игре.