Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django 1.7:继承和迁移_Python_Django_Inheritance_Migration - Fatal编程技术网

Python Django 1.7:继承和迁移

Python Django 1.7:继承和迁移,python,django,inheritance,migration,Python,Django,Inheritance,Migration,在Django 1.7应用程序中 我想在类上添加继承,并将主键从MyChild迁移到MyParent类 继承前: class Mychild(models.Model): field1 = models.CharField(max_length=255) field2 = models.CharField(max_length=255) 继承后: class Mychild(MyParent): field1 = models.CharField(max_len

在Django 1.7应用程序中

我想在类上添加继承,并主键从MyChild迁移到MyParent类

继承前:

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\u ptr\u id不存在 第1行:…“mychild”内部连接(“mychild…”上的“myparent…”

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


抱歉,英语不好。早安

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


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

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


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

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


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

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


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

我只是更改了在GenericForeignKey中引用MyParent的外键。有效。谢谢。我只是更改了在GenericForeignKey中引用MyParent的外键。有效。谢谢。我只是更改了在GenericForeignKey中引用MyParent的外键。有效。谢谢。我只是更改在GenericForeignKey中引用MyParent的外键。它可以工作。谢谢。
class MyParent(models.Model):
    field2 = models.CharField(max_length=255)

    class Meta:
        abstract = True


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