在过去,我一直在Djangos RunPython操作的帮助下完成此操作。创建一个处理以下内容的自定义迁移。
- 更改字段的名称。
- 添加所需类型的新字段。
- RunPython处理从一个转换到另一个的逻辑。
- 删除旧字段。
def migrate_time_to_positive_int(apps, schema_editor):
MyModel = apps.get_model('myapp', 'MyModel')
for mm in MyModel.objects.all():
field_old_time = mm.field_name_old
field_new_int = field_old_time.total_seconds()/60
mm.field_name = field_new_int
mm.save()
class Migration(migrations.Migration):
operations = [
migrations.RenameField(
model_name='mymodel',
old_name='field_name',
new_name='field_name_old',
),
migrations.AddField(
model_name='mymodel',
name='field_name',
field=models.PositiveIntegerField(),
),
migrations.RunPython(migrate_time_to_positive_int),
migrations.RemoveField(
model_name='mymodel',
name='field_name_old',
)
]
field_name_old.total_seconds()/ 60可能需要进行调整,但你的想法。
这很有趣,我也会试试。谢谢 –