在migration causes FieldE中auto-generated-ptr字段上的AlterField

2024-04-19 14:46:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种型号:

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

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

^{pr2}$

app2的初始迁移中,django创建了名为parent_link=TrueOneToOneField。在

现在我想将这个自动生成的字段改为IntegerField,因此我使用以下操作创建新的迁移:

class Migration(migrations.Migration):

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

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

尝试迁移时,我有个例外

django.core.exceptions.FieldError: Auto-generated field 'parentmodel_ptr' in class 'ChildModel' for parent_link to base class 'ParentModel' clashes with declared field of the same name.

那么,有没有可能做到呢?在


Tags: djangotruefieldmodelsmigrationslinkmigrationclass
1条回答
网友
1楼 · 发布于 2024-04-19 14:46:33

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

如果您只需要关系而不需要方法等,那么您可以删除继承并使用一个自己创建的OneToOneField或一个IntegerField来保存另一个对象的ForeignKey。你可以用你的最终目标来阐述这个问题,因此提供真正的解决方案比提供理论更简单。在

相关问题 更多 >