Сообщение об ошибке Django " добавить связанный аргумент имени в определение"
D:zjm_codebasic_project>python manage.py syncdb
Error: One or more models did not validate:
topics.topic: Accessor for field 'content_type' clashes with related field 'Cont
entType.topic_set'. Add a related_name argument to the definition for 'content_t
ype'.
topics.topic: Accessor for field 'creator' clashes with related field 'User.crea
ted_topics'. Add a related_name argument to the definition for 'creator'.
topics.topic: Reverse query name for field 'creator' clashes with related field
'User.created_topics'. Add a related_name argument to the definition for 'creato
r'.
topicsMap.topic: Accessor for field 'content_type' clashes with related field 'C
ontentType.topic_set'. Add a related_name argument to the definition for 'conten
t_type'.
topicsMap.topic: Accessor for field 'creator' clashes with related field 'User.c
reated_topics'. Add a related_name argument to the definition for 'creator'.
topicsMap.topic: Reverse query name for field 'creator' clashes with related fie
ld 'User.created_topics'. Add a related_name argument to the definition for 'cre
ator'.
6 ответов:
у вас есть несколько внешних ключей, для которых django не может генерировать уникальные имена.
вы можете помочь, добавив аргументы "related_name" в определения полей foreignkey в ваших моделях. Например:
content_type = ForeignKey(Topic, related_name='topic_content_type')смотрите здесь для получения дополнительной информации. http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name
пример:
class Article(models.Model): author = models.ForeignKey('accounts.User') editor = models.ForeignKey('accounts.User')это вызовет ошибку, потому что Django пытается автоматически создать обратное отношение для экземпляров
accounts.Userдля каждого отношения внешнего ключа к пользователю, какuser.article_set. Этот метод по умолчанию неоднозначен. Хотел быuser.article_set.all()см. статьи пользователя, связанные с полем автор, или С полем редактор?устранение:
class Article(models.Model): author = models.ForeignKey('accounts.User', related_name='author_article_set') editor = models.ForeignKey('accounts.User', related_name='editor_article_set')теперь, для экземпляра user
user, есть два различных метода менеджер :
user.author_article_set--user.author_article_set.all()вернет запрос всех объектов статьи, которые имеют author == user
user.editor_article_set--user.editor_article_set.all()вернет запрос всех объектов статьи, которые имеют редактор = = user
" Если модель имеет внешний ключ, экземпляры модели внешнего ключа будут иметь доступ к менеджеру, который возвращает все экземпляры первой модели. По умолчанию этот менеджер называется FOO_set, где FOO-это имя исходной модели в нижнем регистре."
но если у вас есть более одного внешнего ключа в модели, django не может генерировать уникальные имена для менеджера внешних ключей.
Вы можете помочь, добавив аргументы "related_name" в определения полей foreignkey в вашем модели.см. здесь: https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward
сделайте так, как указано в сообщении об ошибке:
добавить related_name аргумент к определение для "создателя".
но в моем случае я создаю отдельное приложение для некоторых функций с тем же именем модели и поля ( копировать/вставить ;) ) вот из-за этого типа ошибки происходит я просто удалил старую модель и код будет работать нормально
Может быть полезен для начинающих как я :)
Это не окончательный ответ на вопрос, однако для кого-то это может решить проблему. Я получил ту же ошибку в своем проекте после проверки действительно старой фиксации (переход к отдельному головному состоянию), а затем обновил базу кода. Решение было удалить все *.файлы pyc в проекте.
Comments