Skip to main content
 首页 » 编程设计

python之Django之南方迁移之如何将大型迁移分解为几个较小的迁移我怎样才能让南方变得更聪明

2025年05月04日29hnrainll

我已经对我的数据库模式进行了一些调整,现在可以运行了:

> ./manage.py schemamigration --auto my_app 

但是,South 对设置某些字段的默认值等提出了各种反对意见。它也没有意识到我已经重命名了其中一个表中的特定列这一事实 - 它认为我正在删除一列并且添加另一个,实际上我刚刚重命名了一个列。我怎样才能让南方变得更聪明?另外,是否可以将此迁移分解为几个较小的步骤?

请您参考如下方法:

您提到了两个问题:关于默认值的警告消息,以及无法检测到您重命名的列。

关于第一点,South 可能做对了。如果您添加一个非 NULL 的列,South 必须在数据库中放入某物,因此它会提示您说出该东西应该是什么。

关于第二个问题,不幸的是,South 不处理列重命名。解决方案是创建您自己的迁移并使用 db.rename_column。参见 this answer .

虽然以较小的增量对架构进行更改是有意义的,但实际上听起来 South 并没有因为您的更改幅度而感到困惑。鉴于您现在所在的位置,我建议首先撤消列名称更改并运行 schemamigration --auto 来处理所有其他更改。我怀疑这会很好用。然后创建一个新的迁移来重命名列。