如何使用 Django migrate 命令跳过迁移?

How can I skip a migration with Django migrate command?

首先,我问的是1.7引入的Django迁移,不是south

假设我有迁移 001_add_field_x002_add_field_y,并且它们都应用于数据库。现在我改变主意,决定恢复第二个迁移并用另一个迁移替换它 003_add_field_z

也就是说,我想申请001和003,跳过002,我该怎么做?

P.S。我知道我可以向后迁移到 001,但是在我进行 003 迁移并执行迁移命令后,001 到 003 将全部应用,对吗?

您可以使用 --fake 选项。

恢复到 0001 后,您可以 运行

python manage.py migrate <app> 0002 --fake

然后是运行

python manage.py migrate <app> #Optionally specify 0003 explicitly

在这种情况下仅适用 0003

如果您不想对所有 environment/other 开发人员执行此过程,您可以删除迁移文件,运行 一个新的 makemigration,然后提交该文件- 是的,使用 --fake 选项

执行 运行 migrate

文档:https://docs.djangoproject.com/en/3.1/ref/django-admin/#cmdoption-migrate-fake

不适用于这种特定情况,但如果想要或需要跳过 所有 未应用的迁移,可以使用:

python manage.py migrate --fake

只是节省了一些输入。