Model gets Meta from abstract ancestor class in MTI
|Reported by:||German M. Bravo||Owned by:||nobody|
|Component:||Database layer (models, ORM)||Version:||1.6|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
I'm getting this validation error:
CommandError: One or more models did not validate: places.restaurant: "index_together" refers to name. This is not in the same model as the index_together statement. places.restaurant: "index_together" refers to address. This is not in the same model as the index_together statement.
From the following models:
from django.db import models class AbstractPlace(models.Model): name = models.CharField(max_length=50) address = models.CharField(max_length=80) class Meta: abstract = True index_together = (('name', 'address'),) class Place(AbstractPlace): pass class Restaurant(Place): serves_hot_dogs = models.BooleanField() serves_pizza = models.BooleanField()
Seemingly, the concrete model
Place ends up with the inherited
Meta from the abstract parent. After the
Place model class is created, during
Meta (declared or inherited) should not be there for concrete classes.
This way, models would never have a
Meta (unless the modified and explicitly added Meta, if they're abstract). I added
new_class.Meta = None just above
ModelBase and that properly fixes the issue.
Change History (4)
comment:2 Changed 2 years ago by
|Component:||Uncategorized → Database layer (models, ORM)|
|Summary:||Multi-table inheritance gets Meta from abstract ancestor model class → Model gets Meta from abstract ancestor class in MTI|
|Triage Stage:||Unreviewed → Accepted|
|Type:||Uncategorized → Bug|