AlterField on auto generated _ptr field in migration causes FieldError

孤者浪人 提交于 2019-12-12 04:32:24

问题


I have two models:

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

Now, in another app, I have child model:

# app2
from app1.models import ParentModel


class ChildModel(ParentModel):
    # some fields here too

In initial migration for app2 django creates OneToOneField with parent_link=True named parentmodel_ptr.

Now I want to change this auto generated field to let's say IntegerField, so I create new migration with this operations:

class Migration(migrations.Migration):

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

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

Trying to migrate, I got an exception

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.

So is that even possible to make it somehow?


回答1:


If your code supports it, you could just change the parent class to an abstract class and have all the fields in the child model. However, if you still do need the parent object separately, then I don't think you can change the Django OneToOne link without some serious hacking (not recommended).

If you only need the relation and don't need the methods, etc. then you could remove the inheritance and go with a self-created either OneToOneField or an IntegerField that holds the ForeignKey to that other object. You could elaborate the question with your end goal, so it would be simpler to offer real solutions rather than theories.



来源:https://stackoverflow.com/questions/39691785/alterfield-on-auto-generated-ptr-field-in-migration-causes-fielderror

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!