我已经对我的数据库模式进行了一些调整,现在可以运行了:
> ./manage.py schemamigration --auto my_app
但是,South 对设置某些字段的默认值等提出了各种反对意见。它也没有意识到我已经重命名了其中一个表中的特定列这一事实 - 它认为我正在删除一列并且添加另一个,实际上我刚刚重命名了一个列。我怎样才能让南方变得更聪明?另外,是否可以将此迁移分解为几个较小的步骤?
请您参考如下方法:
您提到了两个问题:关于默认值的警告消息,以及无法检测到您重命名的列。
关于第一点,South 可能做对了。如果您添加一个非 NULL 的列,South 必须在数据库中放入某物,因此它会提示您说出该东西应该是什么。
关于第二个问题,不幸的是,South 不处理列重命名。解决方案是创建您自己的迁移并使用 db.rename_column。参见 this answer .
虽然以较小的增量对架构进行更改是有意义的,但实际上听起来 South 并没有因为您的更改幅度而感到困惑。鉴于您现在所在的位置,我建议首先撤消列名称更改并运行 schemamigration --auto 来处理所有其他更改。我怀疑这会很好用。然后创建一个新的迁移来重命名列。
