Django 文档说我们可以在压缩迁移后删除它们:
您应该进行此迁移,但保留旧的迁移;这 新迁移将用于新安装。一旦你确定了一切 代码库的实例已应用您压缩的迁移, 你可以删除它们。
这里的删除是指仅删除迁移文件,还是同时删除 django_migrations 表中的条目?
这里是一些背景信息:我只有开发机器,所以只有一个代码库。在压缩了我已经应用的一些迁移之后,我删除了文件和数据库条目。通过迁移测试这是否可以,但没有发现任何东西。所以,一切看起来都很好。第二天,我必须改变一些东西,并进行迁移。当我尝试迁移时,它也尝试应用压缩的迁移(在压缩之前已部分地应用)。因此,我必须返回并重新创建 django_migrations 表中的条目。所以,看来我必须保留数据库条目。我试图在再次搞砸任何事情之前确保它,并首先理解为什么它看起来很好,然后尝试应用压缩的迁移。
压缩的迁移永远不会标记为已应用,这将在 1.8.3 中修复(请参阅#24628)。
删除旧迁移的步骤是:
replaces
属性。./manage.py migrate <app_label> <squashed_migration> --fake
。当 1.8.3 到来时,最后一步将不再需要。
无论如何我都不是专家,但我只是压制了我的迁移,并最终做了以下事情:
运行此查询以删除旧的迁移(已压缩)
DELETE FROM south_migrationhistory;
运行此管理命令以删除幻影迁移
./manage.py migrate --fake --delete-ghost-migrations
Django 1.7 也有 squashmigrations
Django 扩展有一个用于此目的的命令 https://django-extensions.readthedocs.io/en/latest/delete_squashed_migrations.html