2013-01-09 215 views
6

在我的项目的最初阶段,我对模型做了很多更改,因此我最终为我的应用程序生成了大量南迁移。是否有可能在进入我的生产服务器执行迁移之前以任何方式对它们进行整合,因此我不需要为每个应用程序进行百万次迁移?如果是这样,我会怎么做呢?巩固Django南迁移

回答

5

您可以随时删除现有的迁移和create a new "initial" migration

要做到这一点,你将需要:

  1. (完全删除的文件夹)中删除迁移文件为您的应用程序
  2. 运行./manage.py convert_to_south myapp

这将留给你一个迁移对应于您的应用的状态当前状态。


或者,你可以随时收拾最新的迁移在一起:

  1. 删除要合并(仅当它们是最新onces)迁移文件
  2. 运行./manage.py schemamigration myapp

这将创建一个新的迁移,对应于您删除的迁移。


这两个都可能会搞乱你的开发数据库。

+0

因此底线是:否,最好让迁移自行生效? – hkothari

+1

@hkothari这就是我要做的,是的! –

+1

需要'manage.py migrate 零--fake'来清除你的南数据库(在convert_to_south或'manage.py schemamigration --initial'之前。或者,'--delete-ghost-migrations'将有选择地删除您从migrations目录中删除的任何迁移 – hobs

1

由于这是一个开发环境,这是我要做的事(使用SQLite,请参阅下面的其他SQL服务器):

  1. 是否所有的变化,让迁移文件堆积起来。没有提交 迁移文件VCS
  2. 完成后,删除所有的新移民文件
  3. 重命名数据库
  4. 运行manage.py迁移。这将创建数据库结构,就像在对其进行任何更改之前一样。
  5. 运行manage.py makemigrations。这将创建一个反映当前状态
  6. 搬回已经有使用“正确”的SQL服务器上的最终结构&数据
  7. 提交迁移文件

原始数据库必要的迁移,只是不停地2数据库:生产和开发。将项目设置更改为指向生产数据库,而不是在步骤3中重命名。此外,您可以跳过步骤4.