Dynamische Modellerstellung für mehrere Tabellen in Django
Für eine Datenbank, die zahlreiche temporäre Tabellen mit gemeinsamen Schemata und dynamischen Namen enthält, stellt die Integration von Django Herausforderungen dar . Es ist jedoch möglich, eine Factory-Funktion zum Erstellen von Modellen mit dynamischen Datenbanktabellen zu verwenden.
Dynamische Datenbanktabellenverwaltung
Die Factory-Funktion gibt ein Modell mit einer angegebenen Datenbank zurück Tisch. Dies ermöglicht eine dynamische Datenbindung basierend auf Tabellennamen:
<code class="python">def getModel(db_table): class MyClass(models.Model): # Model definition goes here... class Meta: db_table = db_table return MyClass</code>
Sie können dann das Modell mit dem spezifischen Tabellennamen instanziieren:
<code class="python">newClass = getModel('29345794_table') newClass.objects.filter(...)</code>
Metaklasse für dynamische Klassenbenennung
Da Django das _meta-Attribut der Klasse zwischenspeichert, ist eine Metaklasse erforderlich, um den Klassennamen zur Laufzeit zu ändern:
<code class="python">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</code>
Zusätzliche Überlegungen
Obwohl ursprünglich angenommen, dass sie unveränderlich ist, kann die Datenbanktabelle dynamisch festgelegt werden:
<code class="python">MyModel._meta.db_table = '10293847_table'</code>
Das obige ist der detaillierte Inhalt vonWie können Django-Modelle dynamisch für mehrere Tabellen mit gemeinsamen Schemata und dynamischen Namen erstellt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!