sql >> Base de Datos >  >> RDS >> Mysql

¿Modelo Django único, tablas múltiples?

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()