Django South migration如何将一个大的迁移分解为几个小的迁移?我怎样才能让南方更聪明?

2024-04-20 03:33:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我已对数据库架构进行了几次调整,现在是运行的时候了:

> ./manage.py schemamigration --auto my_app

然而,South对设置某些字段的默认值等提出了各种各样的反对意见。它也没有注意到我重命名了我的一个表中的某个列这一事实——它认为我删除了一个列并添加了另一个列,而实际上我刚刚重命名了一个列。我怎样才能让南方更聪明?另外,是否可以将这种迁移分解为几个较小的步骤?你知道吗


Tags: py数据库appautomanage架构my步骤
3条回答

我发现在我对模型定义所做的每一次更改之后进行一次迁移是很有帮助的,而不是针对多个更改进行一次大的迁移,许多较小的迁移提供了更高的粒度,并且当一次迁移/更改不起作用时更容易看到,而不是一次调试x个更改,尽管这可能是不起作用的在你目前的情况下帮助你

记住,如果事情变得太疯狂,你可以删除souths对你的应用程序的管理,重新开始使用你当前的模式进行迁移

创建新模型时,可以在添加属性之前向南运行一次。这将一步创建表。然后,在进行更改时,一次更改一个模型,一次为一个表创建迁移。你知道吗

通过这样做,我发现迁移更干净。你知道吗

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

关于第一个问题,南方的做法可能是正确的。如果您添加一个非空的列,South必须在数据库中放入something,因此它会提示您说出该something应该是什么。你知道吗

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

尽管以小的增量进行模式更改是有意义的,但听起来南方并没有被您的更改的规模搞糊涂。考虑到您现在的位置,我建议您首先撤消列名更改并运行schemamigration auto来处理所有其他更改。我想这样行得通。然后创建一个新的迁移来进行列重命名。你知道吗

相关问题 更多 >