Du kunne, tror jeg, lave en fabriksfunktion, der ville returnere din model med en dynamisk 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 opretter ikke en ny forekomst af klassens _meta
attribut hver gang denne funktion kaldes. Oprettelse af en ny instans for _meta
det afhænger af navnet på klassen (Django skal cache det et sted). En metaklasse kan bruges til at ændre navnet på klassen under kørsel:
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
ikke sikker på om det kan indstilles dynamisk på en allerede defineret klasse. Jeg har ikke selv gjort dette, men det kan måske virke.
Du kan indstille dette når som helst.
>>> MyModel._meta.db_table = '10293847_table'
>>> MyModel.objects.all()