迁移中未找到模型(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 自动生成迁移中未检测到任何变化