迁移中未找到模型(apps.get_model 引发 LookupError)

Posted

技术标签:

【中文标题】迁移中未找到模型(apps.get_model 引发 LookupError)【英文标题】:Model not found in migration (apps.get_model raises LookupError) 【发布时间】:2016-09-29 14:40:39 【问题描述】:

我有以下迁移(为简单起见删除了逻辑):

def migrate_existing_discounts(apps, _):
    ModelA = apps.get_model('myapp', 'ModelA')
    ModelB = apps.get_model('myapp', 'ModelB')

class Migration(migrations.Migration):

    dependencies = [
        ('myapp', '0071_auto_20160531_1342'),
    ]

    operations = [
        migrations.RunPython(migrate_existing_discounts)
    ]

运行时会出现以下异常:

LookupError: App 'myapp' doesn't have a 'modelb' model.

ModelA 继承自 models.Model 并成功加载。另一方面,ModelB 继承自 TranslatableModel,因此它中断了。我读过(2 年前)迁移在加载抽象类时遇到问题(ticket#21786 和 ticket#21519),TranslatableModel 就是其中之一。

我之前遇到过这个问题,最后我改用 RunSQL 迁移,但我想知道如何正确导入模型,因为必须有办法。

注意:包 django-hvad 没有迁移,因此没有任何依赖项要添加。

【问题讨论】:

您使用的是哪个版本的 django?可以添加 ModelA 和 ModelB 的型号代码吗?以及 LookupError 的完整回溯。错误消息以小写字母显示modelb 似乎很奇怪。 模型是否有机会继承到 User 模型? 【参考方案1】:

如果您的所有迁移从头到尾都在运行,那么您引用的模型可能尚不存在于新数据库中。更新迁移中的依赖项列表,以引用应用上定义这些模型的最后一个迁移文件。

【讨论】:

以上是关于迁移中未找到模型(apps.get_model 引发 LookupError)的主要内容,如果未能解决你的问题,请参考以下文章

仅在第一次测试时执行数据迁移

使用 Flask-SQLAlchemy 在 Alembic 自动生成迁移中未检测到任何变化

处理模型中未找到的gensim中的新单词

Code First 迁移中未包含 StringLength 属性的更改

没有找到适合核心数据迁移的映射模型

删除 Enterprise Architect 图表中未找到的所有元素