Django: Почему некоторые моделируют полевое столкновение друг с другом?

Можно сделать:

mylist.append(str(today))
169
задан Serjik 19 December 2015 в 08:40
поделиться

3 ответа

У вас есть два внешних ключа для пользователя. 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()
290
ответ дан 23 November 2019 в 20:51
поделиться

Модель Пользователь пытается создать два поля с одинаковым именем, одно для GameClaims , у которых есть этот Пользователь в качестве цели , а также для GameClaims , у которых этот Пользователь является заявителем . Вот документы по related_name , которые позволяют Django устанавливать имена атрибутов, чтобы автоматически сгенерированные атрибуты не конфликтовали.

8
ответ дан 23 November 2019 в 20:51
поделиться

OP не использует абстрактный базовый класс ... но если да, то вы обнаружите, что жесткое кодирование related_name в FK (например, ..., related_name = "myname") приведет к ряду эти конфликтные ошибки - по одной для каждого унаследованного от базового класса класса. Приведенная ниже ссылка содержит обходной путь, который прост, но определенно не очевиден.

Из документации django ...

Если вы используете related_name атрибут на ForeignKey или ManyToManyField, вы всегда должны укажите уникальное обратное имя для поле. Обычно это вызывает проблема в абстрактных базовых классах, так как поля в этом классе входит в состав каждого ребенка классы, с точно такими же значениями для атрибутов (включая related_name) каждый раз.

Подробнее здесь .

7
ответ дан 23 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: