Das Erstellen einer dynamischen Klasse kann einige Vorteile mit sich bringen, z. B. das Erstellen eines Modells aus einer Klasse, wodurch neue Funktionen generiert werden.
Wie funktionieren Klassen im Framework?
Um dynamische Modelle zu generieren, müssen Sie zunächst sicherstellen, dass Sie verstehen, wie Klassen in Python funktionieren.
Wir wissen, dass Python- Klassen Objekte sind, die zur Laufzeit mithilfe des internen type () -Konstruktors erstellt werden können und die Details darüber erhalten, wie sie definiert werden sollen.
Models in Django
Da wir wissen, wie Klassen in Python funktionieren, müssen wir betonen, dass die Modelle in Django Standardklassen von Python sind, nur dass sie so deklariert sind, wie sie von Django verwendet werden können und dass sie Standardklassen sind, sodass wir Modelle zur Laufzeit generieren können.
Erste Implementierung
Sehen wir uns das folgende Bild mit einem kleinen Code an:
Hier sehen wir, wie das Django-Framework das Modellmodul importiert. Anschließend haben wir eine Methode erstellt, um die Modelle mit dem Konstruktor type () zu erstellen, den wir im vorherigen Punkt des Lernprogramms erwähnt haben.
Obwohl dieser vereinfachte Ansatz, den wir angewendet haben, offensichtlich nicht funktioniert, besteht das Problem darin, dass Django erwartet, dass ein Wörterbuch ein Modul mit seinem Code enthält.
Sehen wir uns jetzt einen Code an, mit dem wir dieses Problem lösen:
def create_model (name, module_path): Rückgabetyp (name, (models.Model,), {'__module__': module_path})
Mit dieser Implementierung haben wir den ersten Fehler im ersten Beispiel behoben.
Konfigurationsoptionen hinzufügen
Wir werden unseren dynamischen Modellgenerierungscode vervollständigen, einschließlich der Möglichkeit, die Konfigurationsoptionen von Django einzubeziehen . Dazu werden wir die Meta-Klasse verwenden und ihre Operation überschreiben, damit unsere neue Implementierung es uns ermöglicht, die Art und Weise, wie wir vorgehen, neu zu definieren Um die Optionen zu verwalten, sehen wir uns in der folgenden Abbildung den Code an, der bereits ausgeführt wurde, um dies zu erreichen:
In diesem Code haben wir einige Aspekte unseres ursprünglichen Codes deutlich geändert. Zunächst haben wir festgelegt, dass der Pfad des Moduls wie folgt lautet: Django.db.models . Von hier aus werden wir die ursprünglichen Definitionen zeichnen. Sobald dies geschieht, erstellen wir ein Wörterbuch, in dem wir es zuweisen a __module__ der Wert des Pfads, den wir definiert haben.
Dann überarbeiten wir die Meta-Klasse. Damit haben wir die möglichen Probleme gespeichert, die wir zu Beginn dieses Punktes angesprochen hatten. Schließlich können wir unsere Methode type () aufrufen und die erforderlichen Daten übergeben, ohne Fehler zu verursachen.
Mit diesem neuen Wissen, das wir generiert haben, verfügen wir bereits über eine solide Basis, mit der wir sicherer mit dem Django- Code interagieren können, was uns in eine vorteilhafte Position für die Entwicklung unserer Anwendungen und die Generierung von Formmodellen versetzt. dynamisch in der Ausführungszeit unseres Programms.