Sì, l'unico modo per cambiare il nome della tabella creata è quello di impostare db_table alla classe Meta interiore.
Vedere https://docs.djangoproject.com/en/dev/ref/models/options/#table-names.
Tuttavia, con alcune magie di metaclass, è effettivamente possibile fare ciò che si sta cercando. Questo esempio serve solo a dimostrare che è possibile dal momento che Python è un linguaggio così carino. Può rompere con le versioni più recenti (anche se improbabili) di Django poiché ModelBase e _meta non sono documentati ufficialmente AFAIK. Mi limiterei a aggiungere db_table manualmente nei tuoi modelli.
Creando una metaclasse personalizzata che costruisca le classi del modello, è possibile modificare l'attributo db_table nella meta class interna.
from django.db import models
from django.db.models.base import ModelBase
class ModelWithoutAppNameBase(ModelBase):
def __new__(cls, name, bases, attrs):
model = super(ModelWithoutAppNameBase, cls).__new__(cls, name, bases, attrs)
model._meta.db_table = name.lower()
return model
class ModelWithoutAppName(models.Model):
__metaclass__ = ModelWithoutAppNameBase
È quindi eredita dalla ModelWithoutAppName
invece di django.db.models.Model
quando si creano i modelli:
class YourModel(ModelWithoutAppName): # database table name will be yourmodel
foo = models.IntegerField()
Non sono sicuro, ma a sud potrebbe farlo. –
Non si tratta di creare tavoli a sud, ma anche di django che li usano. Quindi sì e no. Ci sono sempre alcuni modi per superarlo, ma il modo sicuro e ben documentato è solo quello all'interno del django della vaniglia, per quanto ne so. – JackLeo