迁移回滚期间无法从其他应用导入 Django 模型

Posted

技术标签:

【中文标题】迁移回滚期间无法从其他应用导入 Django 模型【英文标题】:Unable to import Django model from the other app during migration roll-back 【发布时间】:2018-07-07 15:27:29 【问题描述】:

我正在为 new_app 创建一个数据迁移,并有可能将其回滚。

# This is `new_app` migration
class Migration(migrations.Migration):

    dependencies = [
    ]

    operations = [
        migrations.RunPython(import_data, reverse_code=delete_data)
    ]

此迁移将一些数据添加到其他应用程序中定义的模型:my_other_app。要导入我想要更新或删除记录的模型,我使用apps.get_model() 方法。

# This is `new_app` migration
def import_data(apps, schema_editor):   
    model = apps.get_model('my_other_app', 'MyModel')

当我应用迁移时,它就像魅力一样。但是当我运行尝试使用 :~> manage.py migrate new_app zero 回滚迁移时出现异常:LookupError: No installed app with label 'my_other_app'. 回滚代码中的模型导入:

# This is `new_app` migration
def delete_data(apps, schema_editor):
    schema_model = apps.get_model('my_other_app', 'MyModel')

模型导入的代码是一样的,但是为什么在迁移回滚时不起作用?现在我有一个在回滚期间使用直模型import 的解决方法。不知道以后会不会有麻烦。

【问题讨论】:

【参考方案1】:

确保dependencies 包含来自您引用的其他应用的最新迁移。例如:

dependencies = [
    'my_other_app.0001_initial',
]

另外,请确保 'my_other_app' 在您的 INSTALLED_APPS 设置中。

【讨论】:

以上是关于迁移回滚期间无法从其他应用导入 Django 模型的主要内容,如果未能解决你的问题,请参考以下文章

将旧 (Django 0.97) 模型数据导入/迁移到 Django 1.8 或更高版本

迁移期间的 Django 问题 - 懒惰的参考

如何在南迁移期间调用 django 模型类的静态方法

如果 Django 中已经存在某些表,如何强制迁移到数据库?

Django 模型外键字段在测试期间的迁移中不可用

Heroku 不会在 Django 上迁移模型