Django错误消息“将一个related_name参数添加到定义”

D:\zjm_code\basic_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'. 

你有一些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

“如果一个模型有一个ForeignKey,外键模型的实例将有权访问一个pipe理器,返回第一个模型的所有实例。默认情况下,这个pipe理器被命名为FOO_set,其中FOO是源模型名称,小写。

但是,如果模型中有多个外键,则django无法为外键pipe理器生成唯一的名称。
你可以通过在模型中的foreignkey字段定义中添加“related_name”参数来提供帮助。

看到这里: https : //docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward

例:

 class Article(models.Model): author = models.ForeignKey('accounts.User') editor = models.ForeignKey('accounts.User') 

这将导致错误,因为Django试图自动为accounts.User实例创build一个向后关系。用户对于每个外键关系用户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的实例,有两种不同的pipe理器方法:

  1. user.author_article_setuser.author_article_set.all()将返回具有作者==用户的所有Article对象的Queryset

  2. user.editor_article_setuser.editor_article_set.all()将返回具有编辑器==用户的所有Article对象的Queryset

请按照错误消息指示您:

将“related_name”参数添加到“creator”的定义中。

但在我的情况下,我创build一个单独的应用程序与相同的模型名称和字段(复制/粘贴;)一些function),因为这种types的错误发生,我只是删除旧的模型和代码将正常工作
可能会帮助像我这样的初学者:)

这不是问题的最终答案,但是对于某个人来说,它可能会解决问题。 在检查出一个真正的旧提交(去分离的头状态),然后获取代码库的最新信息之后,我在项目中得到了同样的错误。 解决scheme是删除项目中的所有* .pyc文件。