升级到 Django1.7 后,related_names 抛出错误

Posted

技术标签:

【中文标题】升级到 Django1.7 后,related_names 抛出错误【英文标题】:After upgrading to Django1.7 related_names throw error 【发布时间】:2014-07-02 03:27:05 【问题描述】:

使用 Django1.6 一切正常,但升级到 Django1.7 时显示“应用程序注册表未准备好”,因此我将模型中的 get_user_model() 更改为 settings.AUTH_USER_MODEL。

class MyModel(models.Model, SomeMixin):
    content = models.TextField()
    posted_by = models.ForeignKey(settings.AUTH_USER_MODEL,
                              related_name='name1')
    note = models.ForeignKey(SomeModel, related_name='name2')

    created = models.DateTimeField(auto_now_add=True)

现在,在启动服务器时,我收到以下错误消息。

错误: apps.MyModel.posted_by:(fields.E304)“model_field”的反向访问器与“model_field”的反向访问器冲突。 提示:在 'model_field' 或 'model_field' 的定义中添加或更改相关名称参数。

更改相关不是我能采用的最佳方法,因为更改相关名称涉及更改大量代码。我在这里想念什么?我应该寻找什么?任何帮助将不胜感激。

【问题讨论】:

如果相关名称发生冲突,那么除了添加或更改related_name 之外,您实际上无能为力,即使这涉及更改大量代码。目前尚不清楚冲突是什么,因为您的问题是实际模型名称的混合,例如Comment 和像 MyModel 这样的虚构名称。 这只是我的一个模型的一个例子,我在大多数模型中都遇到了同样的错误。我尝试更改相关名称,这似乎解决了除了 User.groups(我无法更改)之外的问题。你有什么解决办法吗? 正如我之前所说,我认为您的示例代码没有提供足够的信息来了解问题所在。希望你能弄清楚。 【参考方案1】:

为其中一个字段设置related_name='+' 为我解决了类似的问题。请参阅 this question 上接受答案的 cmets

【讨论】:

以上是关于升级到 Django1.7 后,related_names 抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Django 1.7。导入错误:没有名为仪表板的模块

makemigrations 和升级到 Django 1.7 的问题

升级到 django 1.7 后所有管理员网址的 NoReverseMatch

django 如何知道创建项目/应用程序的版本

在 Django 1.7 迁移之前运行 South 迁移的推荐方法是啥?

Django1.6版本的PG数据库定义手动升级