我对我的数据库架构进行了一些调整,现在可以运行了:
> ./manage.py schemamigration --auto my_app
然而,South提出了一些关于为某些字段等设置默认值的异议。我也没有意识到我已经在我的一个表中重命名了某个列 - 它认为我放弃了一个列并且添加另一个,实际上我刚刚重命名了一个列。我怎样才能让南方更聪明?此外,是否可以将此迁移分解为几个较小的步骤?
答案 0 :(得分:1)
您提到了两个问题:有关默认值的警告消息,以及无法检测重命名的列。
关于第一个,南方可能正在做正确的事情。如果你添加一个非NULL的列,South必须在数据库中放入某些东西,所以它会提示你说出应该是什么。
关于第二个,很遗憾,South不处理列重命名。解决方案是创建您自己的迁移并使用db.rename_column
。请参阅this answer。
尽管以较小的增量进行架构更改是有意义的,但实际上听起来南方并没有因为您的更改的大小而感到困惑。鉴于您现在的位置,我建议先撤消列名更改并运行schemamigration --auto
来处理所有其他更改。我怀疑这会很好。然后创建一个新的迁移来进行列重命名。
答案 1 :(得分:0)
我发现在对模型定义进行的每次更改之后进行迁移很有帮助,而不是针对多次更改进行1次大迁移,大量较小的迁移提供了更多的粒度,并且当迁移/更改没有进行迁移时更容易看到。反对试图调试,x一次改变,虽然这可能在你目前的情况下不会帮助你
请记住,如果事情变得太疯狂,您可以删除应用的南方管理,并使用当前模型状态重新开始迁移
答案 2 :(得分:0)
创建新模型时,可以在添加属性之前向南运行一次。这将一步创建表。然后,当您进行更改时,一次更改一个模型并一次为一个表创建迁移。
通过这样做,我发现迁移更加清晰。