2015-06-04 34 views
3

Django文档说,我们可以挤压他们后删除迁移:如何在压缩django之后删除它们?

你应该犯这种迁移,但留下的旧到位; 新迁移将用于新安装。一旦确定代码库的所有 实例都已应用您压缩的迁移,您可以删除它们。

这里,删除意味着只删除迁移文件,还是删除django_migrations表中的条目?

这里有一些背景:我只有开发机器,所以只有一个代码库。在压缩了我已经应用的一些迁移之后,我删除了这些文件和数据库条目。经过测试,如果通过迁移确定,它没有发现任何东西。所以,一切都很好。第二天,我不得不改变一些东西,并进行移民。当我尝试迁移时,它也尝试应用压扁的迁移(在被压扁之前部分应用)。所以,我不得不回去重新创建django_migrations表中的条目。所以,我似乎必须保留数据库条目。我试图在我再次搞乱任何事之前确定它,并理解它为什么看起来很好,然后尝试应用压扁的迁移。

回答

3

压扁的迁移永远不会被标记为已应用,将在1.8.3中进行修复(请参阅#24628)。

删除旧的迁移的步骤如下:

  1. 确保全部换成迁移应用(或没有人)。
  2. 删除旧迁移文件,从压扁的迁移中删除replaces属性。
  3. (解决方法)运行./manage.py migrate <app_label> <squashed_migration> --fake

当1.8.3到达时,最后一步将不再需要。

0

我以任何方式的专家,但我只是压扁我的迁移,并最终做了以下内容:

然此查询删除旧的迁移(挤压)

DELETE FROM south_migrationhistory; 

运行这种管理命令删除幻像迁移

./manage.py migrate --fake --delete-ghost-migrations 

的Django 1.7也有squashmigrations

+0

我应该提到我用Django的1.8,所以这不是一个向南迁移。但感谢您的答案。 – mehmet

1

自问题发布以来,转换压扁的迁移变得更加容易。我发布了一个small sample project,演示了如何压缩具有循环依赖关系的迁移,并且还展示了在所有安装迁移到压扁点之后如何将压扁迁移转换为常规迁移。

正如Django documentation说:

  • 删除所有它所取代的迁移文件:

    您必须再由过渡压扁迁移到正常迁移。

  • 更新所有依赖于已删除迁移的迁移取决于压扁的迁移。
  • 删除挤压迁移的Migration类中的替换属性(这是Django如何告诉它是压扁的迁移)。
相关问题