Django 1.7.3 - 查找字段引用的模型失败

Posted

技术标签:

【中文标题】Django 1.7.3 - 查找字段引用的模型失败【英文标题】:Django 1.7.3 - Lookup failed for model referenced by field 【发布时间】:2015-04-12 16:01:42 【问题描述】:

我正在尝试使用 Django 创建一个新模型,但我一直遇到错误 Lookup failed for model referenced by field help.HelpDefinition.org: account.OrganizationOrganization 已导入。你可以看到下面的模型。

models.py

org = models.ForeignKey(Organization, unique=True)
help_type = models.CharField(max_length=255, choices=HELP_CHOICES)
help_content = models.TextField(blank=True)

此模型之前已成功迁移。我在 Postgres 中通过 psql 删除了表,以便可以重新创建它。

【问题讨论】:

【参考方案1】:

当您更改关系中的目标对象时会发生这种情况。即使它们具有相同的名称和字段,它们也不是相同的对象。我遇到了同样的问题,从 migrations 文件夹中删除所有以前的迁移解决了它。

【讨论】:

这听起来很奇怪,但实际上是这样做的。对模型名称的修改似乎 Django 迁移尚不支持(或版本 1.7.3 尚不支持)。 如果需要修改模型名称,可以创建一个空迁移,使用RenameModel类。【参考方案2】:

您还可以将来自对象应用的最后一次迁移添加为迁移的依赖项。这对我有用。

class Migration(migrations.Migration):

dependencies = [
    (<app>, <last_migration_filename>),
...

【讨论】:

我还通过在依赖项中添加另一个应用程序迁移解决了“查找字段引用的模型失败...”错误。 并非所有英雄都穿着斗篷。这个答案救了我。高分!【参考方案3】:

我的情况是:离开南方我从几个应用程序中删除了几乎所有迁移文件并应用了makemigrationsmigrate,后来我在一个应用程序中发现了一些被遗忘的迁移,我尝试执行该过程(删除/makemigrations) 仅适用于这个应用程序。但是后退一步并为所有应用程序重新创建迁移为我解决了这个问题。

【讨论】:

以上是关于Django 1.7.3 - 查找字段引用的模型失败的主要内容,如果未能解决你的问题,请参考以下文章

Django ORM - 模型引用另一个模型ManyToMany字段

Django 通过外键或其他字段引用模型

带有查找字段的嵌套模型外键上的 Django JOIN

使用跨越关系的字段查找在 django 模型上进行链式过滤和排除

django模型引用其他类的对象

Django自引用多对多模型