如何改变南迁的顺序

时间:2012-01-17 07:10:18

标签: django django-south

我的store应用中有大约50次迁移,其中一些是schemamigration,有些是datamigration。现在我想在0039_add_column_is_worldwide之前运行0037_some_values_to_objects。所以我更改了名称0037_add_column_is_worldwide0039_some_values_to_objects

当我为新数据库执行syncdb时,它正常工作,但在迁移现有数据库中的新迁移时,它会出现此错误。

  

引发例外.InconsistentMigrationHistory(问题)   south.exceptions.InconsistentMigrationHistory:迁移历史记录不一致   可以使用以下选项:       --merge:只会尝试迁移,忽略任何潜在的依赖冲突。

我不想丢失我的数据,所以有没有改变这些迁移的顺序?

2 个答案:

答案 0 :(得分:4)

迁移在运行时存储在数据库中,因此如果您已经应用了这些迁移,那么南方将会丢失。你的选择:

  • 刷新迁移表(如果调用migrate,将导致所有迁移再次运行)
  • 回滚这些迁移(重命名前)
  • 假冒这些迁移(迁移 - 假,但数字可能与数据库中的数字冲突)
回滚对我来说似乎是最安全的,只要确保项目中的每个人都这样做。

如果您仍然在dev中且没有prod数据库,则可以始终从零重新启动:

  • 冲洗南db
  • migrate --fake

答案 1 :(得分:0)

我猜你的数据库已经完成了“0037_some_values_to_objects”。

我会这样做:

删除“0037_some_values_to_objects”中forward()和其他方法中的代码。此迁移不起作用。现在添加两个新的迁移。

经验法则:如果一个系统完成了迁移,请不要删除它。把它弄空。