Django向南,删除特定的迁移

时间:2014-04-09 08:13:18

标签: django django-south

在学习南方的过程中,我犯了一些错误,我想重新思考。这是其中之一:

# migrate --list
(*) 0002_auto__add_lesson #add the table
(*) 0003_auto__del_lesson #dammit, table uses wrong db engine so delete it
(*) 0004_auto__add_lesson #recreate the table

显然,如果他们已加星标,我可以直接执行第4步,第2步和第3步:

./migrate my_app 0004

但是,由于步骤2和3是冗余的并且不需要运行,是否可以简单地删除它们?此外,我应该添加我担心有人可能只是运行迁移,然后删除表(和任何数据),然后重新创建它...

提前致谢,

1 个答案:

答案 0 :(得分:4)

这里有两个注意事项。

首先,如果您已经运行了迁移,那么它将被记录在数据库中,如果您只删除一个文件而不是遇到问题:您的数据库将引用不存在的迁移。有一个解决方案:使用./manage.py migrate my_app 0001向后运行迁移2和3,然后删除迁移文件。如果您无法迁移回来(例如,您手动搞砸了数据库),那么您可以假装使用./manage.py migrate my_app 0001 --fake迁移回来并设置数据库,因为它应该是手动的。假意表示不会进行任何模式更改,但会删除运行迁移的注释。

其次,您推送了代码并且其他人已经运行了您的迁移。在这种情况下,您需要创建一个新的迁移,恢复您使用2和3完成的任何操作。这样,任何人都可以通过运行新的迁移来恢复不需要的更改。