Смятам, че бихте могли да създадете фабрична функция, която да върне вашия модел с динамичен 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( ...
РЕДАКТИРАНЕ:Django не създава нов екземпляр на _meta
на класа атрибут всеки път, когато се извиква тази функция. Създаване на нов екземпляр за _meta
зависи от името на класа (Django трябва да го кешира някъде). Метаклас може да се използва за промяна на името на класа по време на изпълнение:
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
не съм сигурен дали може да се задава динамично на вече дефиниран клас. Самият аз не съм го правил, но може да проработи.
Можете да зададете това по всяко време.
>>> MyModel._meta.db_table = '10293847_table'
>>> MyModel.objects.all()