Django 1.7:继承和迁移

Django 1.7 : inheritance and migration

Django 1.7 应用程序中。

我想在 class 上添加继承 主键从 MyChild 迁移到 MyParent class .

继承前:

class Mychild(models.Model):
    field1 = models.CharField(max_length=255)
    field2 = models.CharField(max_length=255)

继承后:

class Mychild(MyParent):
        field1 = models.CharField(max_length=255)

class MyParent(models.Model):
        field2 = models.CharField(max_length=255)

自动迁移不起作用,所以我尝试手动进行。

def migration(apps, schema_editor):
    for child in MyChild.objects.all():
        parent = MyParent(id=child.pk,field2=child.field2)


class Migration(migrations.Migration):
    dependencies = [
        ('mychild', '0001_initial'),
    ]

    operations = [
        migrations.RunPython(
            migration,
        ),
    ]

我在尝试迁移时遇到此错误。

django.db.utils.ProgrammingError: 列 mychild.myparent_ptr_id 不存在 第 1 行:..."mychild" INNER JOIN "myparent" ON ( "mychild...

我认为我的迁移功能不起作用,我需要手动添加允许 link Mychild 和 MyParent(可能是 models.OneToOneField)的字段。

抱歉英语不好。美好的一天

不建议像您那样使用继承,因为它会创建大量的连接表。如果模型中的公共字段不多,那么你最好在代码中复制它们。如果你仍然想使用继承,那么你最好使用 django 抽象模型,它既不为连接也不为父类创建表(仅用于派生 类):

class MyParent(models.Model):
    field2 = models.CharField(max_length=255)

    class Meta:
        abstract = True


class Mychild(MyParent):
    field1 = models.CharField(max_length=255)

我认为这可以解决您的迁移问题。