Django 迁移——如何在迁移过程中擦除模型?
Django migrations -- how do I wipe a model as part of a migration?
我有一个工作流程,其中一个模型是由脚本根据一些也存储在数据库中的数据生成的:
SourceData -> management command generates -> Results
当我更改 Results 模型的生成方式时,例如添加新字段,我不想设置默认值或更新现有模型,我想删除所有模型,只是 运行 脚本再次使用新字段重新生成它们:
Delete all Results -> run management command v2 -> Results (+ new field)
有没有简单的方法来做到这一点?我在网上找到的所有内容都是如何通过删除 whole 数据库来完成此操作,这不是我想要的,我只想删除这个 table 并重新创建它.
无法找到正确的方法,但通过以下方式成功破解:
- 从干净的 git 历史记录(无脏文件)开始 -- 让后续步骤更容易
- 将有问题的模型重命名为其他名称,例如 Model2
- 运行 迁移
- 还原除生成的迁移之外的所有更改
- 重新排序生成的迁移文件,使
DeleteModel
排在 CreateModel
之前,并将 CreateModel
中创建的模型名称改回原始模型名称。它应该看起来像这样:
class Migration(migrations.Migration):
dependencies = [
("<app name>", "<previous migration>"),
]
operations = [
migrations.DeleteModel(
name="ModelName",
),
migrations.CreateModel(
name="ModelName",
fields=[
# < all fields of your model >
],
options={
# < all meta options of your model >
},
),
]
我有一个工作流程,其中一个模型是由脚本根据一些也存储在数据库中的数据生成的:
SourceData -> management command generates -> Results
当我更改 Results 模型的生成方式时,例如添加新字段,我不想设置默认值或更新现有模型,我想删除所有模型,只是 运行 脚本再次使用新字段重新生成它们:
Delete all Results -> run management command v2 -> Results (+ new field)
有没有简单的方法来做到这一点?我在网上找到的所有内容都是如何通过删除 whole 数据库来完成此操作,这不是我想要的,我只想删除这个 table 并重新创建它.
无法找到正确的方法,但通过以下方式成功破解:
- 从干净的 git 历史记录(无脏文件)开始 -- 让后续步骤更容易
- 将有问题的模型重命名为其他名称,例如 Model2
- 运行 迁移
- 还原除生成的迁移之外的所有更改
- 重新排序生成的迁移文件,使
DeleteModel
排在CreateModel
之前,并将CreateModel
中创建的模型名称改回原始模型名称。它应该看起来像这样:
class Migration(migrations.Migration):
dependencies = [
("<app name>", "<previous migration>"),
]
operations = [
migrations.DeleteModel(
name="ModelName",
),
migrations.CreateModel(
name="ModelName",
fields=[
# < all fields of your model >
],
options={
# < all meta options of your model >
},
),
]