У вас есть два внешних ключа для пользователя. Django автоматически создает обратную связь между пользователем и GameClaim, обычно это gameclaim_set
. Однако, поскольку у вас есть два FK, у вас будет два атрибута gameclaim_set
, что, очевидно, невозможно. Поэтому вам нужно указать Django, какое имя использовать для обратной связи.
Используйте атрибут related_name
в определении FK. например,
class GameClaim(models.Model):
target = models.ForeignKey(User, related_name='gameclaim_targets')
claimer = models.ForeignKey(User, related_name='gameclaim_users')
isAccepted = models.BooleanField()
Модель Пользователь
пытается создать два поля с одинаковым именем, одно для GameClaims
, у которых есть этот Пользователь
в качестве цели
, а также для GameClaims
, у которых этот Пользователь
является заявителем
. Вот документы по related_name
, которые позволяют Django устанавливать имена атрибутов, чтобы автоматически сгенерированные атрибуты не конфликтовали.
OP не использует абстрактный базовый класс ... но если да, то вы обнаружите, что жесткое кодирование related_name в FK (например, ..., related_name = "myname") приведет к ряду эти конфликтные ошибки - по одной для каждого унаследованного от базового класса класса. Приведенная ниже ссылка содержит обходной путь, который прост, но определенно не очевиден.
Из документации django ...
Если вы используете related_name атрибут на ForeignKey или ManyToManyField, вы всегда должны укажите уникальное обратное имя для поле. Обычно это вызывает проблема в абстрактных базовых классах, так как поля в этом классе входит в состав каждого ребенка классы, с точно такими же значениями для атрибутов (включая related_name) каждый раз.
Подробнее здесь .