【发布时间】:2017-08-22 01:02:03
【问题描述】:
假设我们有以下依赖关系图的迁移(全部应用):Initial state
现在,出于某种原因,我们希望在应用迁移0006_f 后将数据库模式恢复为状态。我们输入:
./manage.py migrate myapp 0006_f
现在我们有以下状态:One branch reverted
问题是 Django 不恢复右分支,所以现在我们从左分支应用了一些迁移,从右分支应用了一些迁移。
避免这种情况的一种方法是迁移回0002_b 并转发到0006_f,但这可能会导致数据丢失。还有一些迁移0006_f、0005_e、0004_d、0003_c 可能是不可逆的。
另一种方法是运行以下命令:
./manage.py migrate myapp 0006_f
./manage.py migrate myapp 0004_d1
现在,要达到所需的状态,我们只需要恢复迁移0004_d1,我看不到在不撤消 0006_f、0005_e 和 0004_d 的情况下撤消 0004_d1 的方法,除了打开 DB shell并手动还原。
有没有办法明确撤消一个迁移?是否有另一种方法可以正确撤消并行分支的迁移?撤消合并迁移时,Django是否有某些理由不自动从并行分支恢复迁移?
【问题讨论】:
标签: python django database-migration django-migrations