Sie könnten, glaube ich, eine Factory-Funktion erstellen, die Ihr Modell mit einem dynamischen 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( ...
BEARBEITEN:Django erstellt keine neue Instanz von _meta
der Klasse -Attribut jedes Mal, wenn diese Funktion aufgerufen wird. Erstellen einer neuen Instanz für _meta
es hängt vom Namen der Klasse ab (Django muss es irgendwo zwischenspeichern). Eine Metaklasse kann verwendet werden, um den Namen der Klasse zur Laufzeit zu ändern:
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
nicht sicher, ob es dynamisch auf eine bereits definierte Klasse gesetzt werden kann. Ich habe das noch nicht selbst gemacht, aber es könnte funktionieren.
Sie können dies jederzeit festlegen.
>>> MyModel._meta.db_table = '10293847_table'
>>> MyModel.objects.all()