Я думаю, вы могли бы создать заводскую функцию, которая бы возвращала вашей модели динамическую 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 не создает новый экземпляр атрибута класса _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()