迁移中自动生成的_ptr字段上的AlterField会导致FieldError

时间:2016-09-25 20:59:09

标签: python django database-migration

我有两种模式:

# app1
class ParentModel(models.Model):
    # some fields

现在,在另一个应用程序中,我有子模型:

# app2
from app1.models import ParentModel


class ChildModel(ParentModel):
    # some fields here too

app2 django的初始迁移中,使用名为OneToOneField的{​​{1}}创建parent_link=True

现在我想更改此自动生成的字段,让我们说parentmodel_ptr,所以我使用此操作创建了新的迁移:

IntegerField

尝试迁移,我遇到了异常

class Migration(migrations.Migration):

    dependencies = [
        ('app2', '0001_initial'),
    ]

    operations = [
        migrations.AlterField(
            'childmodel',
            'parentmodel_ptr',
            models.IntegerField(null=True, blank=True)
        )
    ]

那么甚至可能以某种方式成功吗?

1 个答案:

答案 0 :(得分:1)

如果您的代码支持它,您可以将父类更改为抽象类,并在子模型中包含所有字段。但是,如果您仍然需要单独使用父对象,那么我不认为您可以在没有严重黑客攻击的情况下更改Django OneToOne链接(不推荐)。

如果您只需要关系并且不需要方法等,那么您可以删除继承并使用自创建的OneToOneField或将ForeignKey保存到该另一个对象的IntegerField。你可以用你的最终目标详细说明问题,因此提供真正的解决方案而不是理论会更简单。