Domnívám se, že byste mohli vytvořit tovární funkci, která by vrátila váš model pomocí dynamického db_table .
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( ...
EDIT:Django nevytváří novou instanci třídy _meta
atribut pokaždé, když je tato funkce volána. Vytvoření nové instance pro _meta
závisí na názvu třídy (Django to musí někde uložit do mezipaměti). Metatřídu lze použít ke změně názvu třídy za běhu:
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
nejsem si jistý, jestli to lze nastavit dynamicky na již definované třídě. Sám jsem to nedělal, ale mohlo by to fungovat.
Toto můžete nastavit kdykoli.
>>> MyModel._meta.db_table = '10293847_table'
>>> MyModel.objects.all()