Podría, creo, hacer una función de fábrica que devolvería su modelo con un dinámico tabla_bd .
def getModel(db_table):
class MyClass(models.Model):
# define as usual ...
class Meta:
db_table = db_table
return MyClass
newClass = getModel('29345794_table')
newClass.objects.filter( ...
EDITAR:Django no crea una nueva instancia de _meta
de la clase atributo cada vez que se llama a esta función. Creando una nueva instancia para _meta
depende del nombre de la clase (Django debe almacenarlo en caché en alguna parte). Se puede usar una metaclase para cambiar el nombre de la clase en tiempo de ejecución:
def getModel(db_table):
class MyClassMetaclass(models.base.ModelBase):
def __new__(cls, name, bases, attrs):
name += db_table
return models.base.ModelBase.__new__(cls, name, bases, attrs)
class MyClass(models.Model):
__metaclass__ = MyClassMetaclass
class Meta:
db_table = db_table
return MyClass
no estoy seguro si se puede configurar dinámicamente en una clase ya definida. No lo he hecho yo mismo, pero podría funcionar.
Puedes configurar esto cuando quieras.
>>> MyModel._meta.db_table = '10293847_table'
>>> MyModel.objects.all()