Django重命名和更改模型字段的数据类型,零停机时间?

Django重命名和更改模型字段的数据类型,零停机时间?,django,django-models,Django,Django Models,我在生产应用程序中使用了一个django模型,我需要更改字段的名称和数据类型,使站点的停机时间为零。这就是我的计划: 1) 在数据库中创建将替换原始字段的新字段 2) 每次加载模型实例时,将数据从原始字段转换并存储到新字段中,然后保存对象(仅当新字段为空时保存对象) 3) 随着时间的推移,一旦每个对象都有一个非空的新字段,就可以删除原始字段 对于第二步,我可以附加什么方法?听起来很复杂,影响了大量的生产代码 您是否试图避免由于停机而大量执行此操作?您使用的数据量是多少 您看过任何Django迁移

我在生产应用程序中使用了一个django模型,我需要更改字段的名称和数据类型,使站点的停机时间为零。这就是我的计划:

1) 在数据库中创建将替换原始字段的新字段
2) 每次加载模型实例时,将数据从原始字段转换并存储到新字段中,然后保存对象(仅当新字段为空时保存对象)
3) 随着时间的推移,一旦每个对象都有一个非空的新字段,就可以删除原始字段


对于第二步,我可以附加什么方法?

听起来很复杂,影响了大量的生产代码

您是否试图避免由于停机而大量执行此操作?您使用的数据量是多少

您看过任何Django迁移工具吗。南方是一个非常受欢迎的地方:


您是否需要先更改业务逻辑(可能还有模板)以适应新的字段名?
除非在代码中的几十个位置将内容分配给相关字段,否则(在数据库中创建字段后)

1) 调整代码以识别旧字段(读取)和新字段(名称)(写入)。
2) 通过锁定/.update()调用等将数据库中的数据从旧字段更改为新字段。
3) 从模型/视图/模板中完全删除旧字段(名称)


如果没有停机时间,我看不出你的站点用户在几秒钟内不会遭受“旧”值的痛苦(取决于表中的行数、重新调用新数据类型的成本等等)。

因为你似乎无法承受任何停机时间(我不想要你的工作!!!)您可能不想冒险重写模型的构造函数方法。您可以尝试的是捕获post init信号


好建议,我仍然在使用进化,而不是南方。听起来南方会解决我的很多问题。