How to handle existing data when introducing an intermediate model between a base model and a child model in a Django Polymorphic inheritance hirarchy

Current models:

class Task(PolymorphicModel):
    pass

class DownloadTask(Task):
    pass

New models: And now i want to do add a new layer called VirtualTask:

class Task(PolymorphicModel):
    pass

class VirtualTask(Task):
    pass

class DownloadTask(VirtualTask):
    pass

Migration it looks like this:

class Migration(migrations.Migration):

    dependencies = [
        ("tasks", "0005_alter_task_last_error"),
    ]

    operations = [
        migrations.CreateModel(
            name="VirtualTask",
            fields=[
                (
                    "task_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="tasks.task",
                    ),
                ),
            ],
            options={
                "abstract": False,
                "base_manager_name": "objects",
            },
            bases=("tasks.task",),
        ),
        migrations.RemoveField(
            model_name="downloadtask",
            name="task_ptr",
        ),
        migrations.AddField(
            model_name="downloadtask",
            name="virtualptask_ptr",
            field=models.OneToOneField(
                auto_created=True,
                default=1,
                on_delete=django.db.models.deletion.CASCADE,
                parent_link=True,
                primary_key=True,
                serialize=False,
                to="tasks.virtualtask",
            ),
            preserve_default=False,
        ),
    ]

“How should I handle existing data when inserting a new intermediate model (VirtualTask) between a base model (Task) and its subclasses in Django

  • should I customize the migration file, and if so, what would be the step-by-step approach?”
Вернуться на верх