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理器方法:
-
user.author_article_set
–user.author_article_set.all()
将返回具有作者==用户的所有Article对象的Queryset -
user.editor_article_set
–user.editor_article_set.all()
将返回具有编辑器==用户的所有Article对象的Queryset
请按照错误消息指示您:
将“related_name”参数添加到“creator”的定义中。
但在我的情况下,我创build一个单独的应用程序与相同的模型名称和字段(复制/粘贴;)一些function),因为这种types的错误发生,我只是删除旧的模型和代码将正常工作
可能会帮助像我这样的初学者:)
这不是问题的最终答案,但是对于某个人来说,它可能会解决问题。 在检查出一个真正的旧提交(去分离的头状态),然后获取代码库的最新信息之后,我在项目中得到了同样的错误。 解决scheme是删除项目中的所有* .pyc文件。