首页 > 解决方案 > Django 迁移——如何在迁移过程中擦除模型?

问题描述

我有一个工作流程,其中模型是由脚本从也存储在数据库中的一些数据生成的:

SourceData -> management command generates -> Results

当我更改结果模型的生成方式时,比如添加一个新字段,我不想设置默认值或更新现有模型,我想删除所有模型,然后再次运行脚本以重新生成它们新领域:

Delete all Results -> run management command v2 -> Results (+ new field)

是否有捷径可寻?我在网上找到的只是如何通过删除整个数据库来实现这一点,这不是我想要的,我只想删除这个表并重新创建它。

标签: pythondjangopostgresqldjango-migrations

解决方案


无法找出正确的方法,但设法通过以下方式破解它:

  • 从干净的 git 历史记录开始(没有脏文件)——让接下来的步骤更容易
  • 将相关模型重命名为其他名称,例如 Model2
  • 运行 makemigrations
  • 还原除生成的迁移之外的所有更改
  • 将生成的迁移文件重新排序DeleteModelCreateModel然后将正在创建的模型的名称更改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 >
            },
        ),
    ]

推荐阅读