Code: Select all
class PrettyModelBase(ModelBase):
def __new__(cls, name, bases, attrs):
super_new = ModelBase.__new__(cls, name, bases, attrs)
module_name = camel_to_underscore(name)
model_module = sys.modules[cls.__module__]
app_label = super_new.__module__.split('.')[-2]
db_table = '%s_%s' % (app_label, module_name)
if not getattr(super_new._meta, 'proxy', False):
super_new._meta.db_table = db_table
return super_new
class BaseModel(models.Model):
__metaclass__ = PrettyModelBase
class Meta:
abstract = True
class MyGreatModel(BaseModel):
somefield = models.TextField(default="")
Wenn ich jedoch diese Migration ausführe und dann das Modell in der Django-Shell untersuche, dann zeigt MyGreatModel._meta.db_table my_great_model an, wie ich es von meinem erwarten würde Metaklasse. Wenn ich das db_table-Attribut manuell zu den 0001-Init-Migrationsoptionen für CreateModel hinzufüge, ist auch für nachfolgende Migrationen alles in Ordnung, aber Django sollte das meiner Meinung nach automatisch tun...
Warum greift Django-Migrationen die db_table hier nicht auf?
Ich verwende Django==1.10.5.
Danke für jede Hilfe
Mobile version