Текст модального окна 1
Текст модального окна 2
Текст модального окна 3
Текст модального окна 4
Создавая модели для разных приложений в проекте необходимо было связать поле с одной моделью посредством ForeignKey
user = models.ForeignKey(to=User, verbose_name='Пользователь', on_delete=models.CASCADE, blank=True, null=True)
но при выполнение миграций получал ошибку (код fields.E304)
Причина ошибки из-за не понимания механизма ForeignKey.
Эта ошибка (кодfields.E304) возникает в Django, когда две разные связи (через ForeignKey) пытаются создать на одной модели обратный аксессор с одним и тем же именем. В вашем случае обе связи (arduino.Rating.user и project.Rating.user) по умолчанию пытаются породить обратный аксессор rating_setна модели User, и Django не может разрешить этот конфликт.
Хотя по моему пониманию должна была быть привязка поля user к модели User, но скорее всего раз есть обратная связь, чтобы в случае удаления юзера удалялись связи во связных моделях.
Как решить проблему
Чтобы устранить конфликт, нужно явно задать для каждого ForeignKey уникальное значение параметраrelated_name. Это скажет Django, какое имя использовать для обратного аксессора, и разрешит неоднозначность. pythontutorials.net
Пример решения:
Измените определение поля в одной из моделей (например, вproject/models.py):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='projekt_ratings')
А в другой модели (например, вarduino/models.py) оставьте без изменения:
user = models.ForeignKey(User, on_delete=models.CASCADE) # related_name будет 'arduino_ratings' по умолчанию
Теперь у пользователя будут два разных атрибута для доступа к связанным объектам:projekt_ratingsиarduino_ratings.
Нет комментариев