【问题标题】:Related model cannot be resolved相关型号无法解析
【发布时间】:2015-03-04 18:45:57
【问题描述】:

我正在使用 Django 1.8b1

两个应用中有两个模型,分别称为accountsproducts

products/models.py
class ChecklistEnterpriseType(models.Model):
    checklist_enterprise_type = models.CharField('Type of Enterprise', max_length=50, choices=zip(ENTERPRISE_CHOICES, ENTERPRISE_CHOICES))

    def __unicode__(self):
        return self.checklist_enterprise_typ

另一个模型是

accounts/models.py
class sample(models.Model):
    enterprise_type = models.ForeignKey(ChecklistEnterpriseType, related_name='enterprise_type')

    def __unicode__(self):
        return self.enterprise_type

当我执行python manage.py makemigrations 时,它会添加迁移文件。但是当我做python manage.py migrate 时,它会引发如下错误:

raise ValueError('Related model %r cannot be resolved' % self.rel.to)
ValueError: Related model u'products.ChecklistEnterpriseType' cannot be resolved

我该如何解决这个问题。

感谢答案:)

【问题讨论】:

  • 您的 INSTALLED_APPS 设置中列出的应用的顺序是什么?
  • @mishbah 订单是 INSTALLED_APPS = ('accounts', 'products',)
  • 尝试交换那个。当您将模型从产品导入帐户时..
  • @mishbah 不工作的伙伴
  • 您能提供完整的回溯吗? accounts 中的迁移文件是否将 products 列为依赖项?

标签: python django


【解决方案1】:

一个非常延迟的响应......但我刚刚遇到了一个类似的问题,很难追查到,但最终做到了,所以我在这里放了一个指针,以防其他人被它击中。我正在向一个有几年历史的 Django webapp 添加测试,发现 ./manage.py 测试失败了。我从未在空数据库上运行 ./manage.py migrate!

在 Django 1.7 早期的某个阶段,生成了循环依赖检测失败的迁移,因此您可以从较新的版本进行更新,但不能从第一次迁移。有关错误报告,请参阅 https://code.djangoproject.com/ticket/22319

我仍然需要弄清楚如何在不丢弃所有迁移并重新生成它们的情况下解决它。

为了解决这个问题,我完成了所有迁移(只有 5 个受影响的文件)。早期迁移需要一些模型,但由于各个字段取决于以后的迁移,因此不包括在内。因此,我将模型的整个 migrations.CreateModel 带回了早期的迁移,但在后来的迁移中使用了这些字段并使用了 migrations.AddField(最初放置模型的位置)。

希望这可以解释它,但如果有人在未来某个时候遇到这个问题,如果需要进一步阐述,请随时发表评论。

【讨论】:

  • 谢谢!这使我了解了我的代码库的修复(对于未来的读者,您的解决方案可能是一个或另一个,具体取决于您的迁移状态)。我无法将 migrations.CreateModel 移动到较早的迁移,因为它已经处于最早的未应用迁移中。在我的情况下,这是因为另一个应用程序中的新迁移也依赖于这个新模型,但它不包括创建模型作为依赖项的迁移。因此,解决方案是检查任何新生成的迁移中是否存在任何缺失的依赖项,特别是如果您同时有多个。
【解决方案2】:

我认为这行:

 checklist_enterprise_type = models.CharField('Type of Enterprise', max_length=50, choices=zip(ENTERPRISE_CHOICES, ENTERPRISE_CHOICES))

应该是:

 checklist_enterprise_type = models.CharField(verbose_name='Type of Enterprise', max_length=50, choices=zip(ENTERPRISE_CHOICES, ENTERPRISE_CHOICES))

【讨论】:

  • nope.. 放置详细时出现意外的关键字参数错误
  • 对不起,这是verbose_name。并确保您导入了 ChecklistEnterpriseType
  • 即使添加了verbose_name也无法解决相同的相关模型引发错误
  • verbose_name 也是第一个位置参数,所以这是不必要的。
  • @knbk 您回答这个问题的时间很长。但不知何故,这对我有用。谢谢
猜你喜欢
  • 2015-12-23
  • 2015-06-17
  • 2023-03-21
  • 2016-02-03
  • 2020-11-26
  • 2018-12-18
  • 2019-04-20
  • 2019-04-14
  • 2023-02-04
相关资源
最近更新 更多