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)
我认为这可以解决您的迁移问题。