Сообщение об ошибке 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'.
439   6  

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, есть два различных метода менеджер :

  1. user.author_article_set--user.author_article_set.all() вернет запрос всех объектов статьи, которые имеют author == user

  2. 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

    Ничего не найдено.