tony95
tony95

Reputation: 180

Overwrite parent model attribute from child model

I have the following model parent

class ModelParent(PolymorphicModel):

    company = models.CharField(max_length=50)
    .......

and the model child

class ModelChild(ModelParent)

     company = models.CharField(max_length=10, blank=True)
     ...........

how can I make the model child company attribute overwrite the parent company model attribute without making the abstract parent model

Upvotes: 4

Views: 2475

Answers (1)

Priyam Mohanty
Priyam Mohanty

Reputation: 502

This is not possible without an abstract parent model, unfortunately.

Field name “hiding” is not permitted

In normal Python class inheritance, it is permissible for a child class to override any attribute from the parent class. In Django, this isn’t usually permitted for model fields. If a non-abstract model base class has a field called author, you can’t create another model field or define an attribute called author in any class that inherits from that base class.

This restriction doesn’t apply to model fields inherited from an abstract model. Such fields may be overridden with another field or value, or be removed by setting field_name = None.

A recommendation instead would be to simply create a property or rename the child model's field. Another thing you could do is remove the parent model's "company" field and move it to all of the children models instead.

class ModelChild(ModelParent)

 child_company = models.CharField(max_length=10, blank=True)
 ...........

Upvotes: 5

Related Questions