Durch Vererbung können Sie Code wiederverwenden und sauberere Datenmodelle erstellen. Aber Django bietet mehr als eine Möglichkeit zur Vererbung, stellen Sie also sicher, dass Sie die Unterschiede kennen.

Modellvererbung ist eine Django ORM-Funktion, die es Entwicklern ermöglicht, hierarchische Beziehungen zwischen Datenbankmodellen zu erstellen. Es ermöglicht die Wiederverwendung von Code, Erweiterbarkeit und eine sauberere Codebasis, indem es die Prinzipien der objektorientierten Programmierung nutzt.

Unabhängig davon, ob Sie eine komplexe Webanwendung erstellen oder an einem kleineren Projekt arbeiten, kann die Modellvererbung erhebliche Vorteile bieten, z. B. die Reduzierung von Redundanz und die Gewährleistung eines konsistenten Verhaltens.

Arten der Modellvererbung in Django

Django bietet Unterstützung für drei Arten der Modellvererbung:

  1. Abstrakte Basisklassen.
  2. Vererbung mehrerer Tabellen.
  3. Proxy-Modelle.

Jede dieser Arten der Modellvererbung hat Vorteile und Sie werden sie für bestimmte Zwecke verwenden.

instagram viewer

Abstrakte Basisklassen

Abstrakte Basisklassen bieten eine Möglichkeit, gemeinsame Felder und Methoden zu definieren, die mehrere Modelle erben können. Wenn Sie beispielsweise über zwei Modelle verfügen, die ähnliche Felder gemeinsam nutzen, können Sie eine abstrakte Basisklasse verwenden, um die ähnlichen Felder zu definieren. Schauen Sie sich dieses Beispiel an:

KlasseKunde(Modelle. Modell):
Name = Modelle. CharField (max_length=50)
E-Mail = Modelle. EmailField()
customer_id = Modelle. IntegerField()

KlasseVerkäufer(Modelle. Modell):
Name = Modelle. CharField (max_length=50)
E-Mail = Modelle. EmailField()
seller_id = Modelle. IntegerField()

Der obige Codeausschnitt definiert zwei Django-Modelle: Kunde Und Verkäufer. Diese Modelle haben zwei gemeinsame Bereiche, nämlich Name Und Email. Um diese Redundanz zu verhindern, können Sie ein separates Modell erstellen, um die gemeinsamen Felder im zu speichern Kunde Und Verkäufer Modelle und machen es abstrakt.

KlasseBenutzerinformation(Modelle. Modell):
Name = Modelle. CharField (max_length=50)
E-Mail = Modelle. EmailField()

KlasseMeta:
abstrakt = WAHR

Der obige Codeausschnitt definiert ein neues Modell und legt das fest abstrakt zuschreiben WAHR. Das bedeutet, dass das Modell abstrakt ist und Django keine Tabelle in der Datenbank erstellt.

Sie können das umschreiben Kunde Und Verkäufer Modelle wie dieses:

KlasseKunde(Benutzerinformation):
customer_id = Modelle. IntegerField()

KlasseVerkäufer(Benutzerinformation):
seller_id = Modelle. IntegerField()

Im Codeausschnitt oben ist der Kunde Und Verkäufer Modelle erben von der Benutzerinformation Modell statt Modelle. Modell.

Sie können Ihre Modelle im Admin-Bereich anzeigen, indem Sie sie in Ihrem registrieren admin.py Datei wie folgt:

aus .Modelle importieren Kunde, Verkäufer

admin.site.register (Kunde)
admin.site.register (Verkäufer)

Migrieren Sie Ihre Modi und starten Sie Ihren Entwicklungsserver, indem Sie Folgendes auf einem ausführen Befehlszeile:

python manage.py makemigrations \
&& python manage.py migrieren \
&& python manage.py runserver

Navigieren Sie zu Ihrer Admin-Site und melden Sie sich mit Ihren Superuser-Daten an. Sie sollten alle drei Felder für jedes Modell sehen.

In diesem Beispiel hat Django eine Tabelle für erstellt Kunde Und Verkäufer Modelle. Sie können sehen, dass die Benutzerinformation Das Modell hat keine Tabelle, da es abstrakt ist.

Vererbung mehrerer Tabellen

Sie können die Mehrtabellenvererbung verwenden, wenn das übergeordnete Modell neben dem untergeordneten Modell auch als Tabelle in der Datenbank vorhanden sein muss.

Im Gegensatz zur abstrakten Basisklassenvererbung, bei der das übergeordnete Modell keine Tabelle in der Datenbank ist, erstellt die Mehrtabellenvererbung eine Tabelle für das übergeordnete Modell.

Bei der Mehrtabellenvererbung erbt das untergeordnete Modell alle Felder und Methoden von seinem übergeordneten Modell und fügt dessen spezifische Felder hinzu. Fremde Schlüssel helfen bei der Etablierung Modellbeziehung zwischen Eltern- und Kindermodellen.

Hier ist ein Beispiel für die Vererbung mehrerer Tabellen:

KlassePerson(Modelle. Modell):
Vorname = Modelle. CharField (max_length=100)
last_name = Modelle. CharField (max_length=100)

defget_name(selbst):
zurückkehrenF"{self.first_name}{self.last_name}"

KlasseMeta:
abstrakt = WAHR

KlasseMitarbeiter(Person):
Employee_id = Modelle. CharField (max_length=20)
Abteilung = Modelle. CharField (max_length=100)
Gehalt = Models. FloatField()
dob = Modelle. DateField()

KlasseManager(Mitarbeiter):
Titel = Modelle. CharField (max_length=100)

Dieses Code-Snippet definiert drei Modelle. Das erste Modell, genannt Person, ist abstrakt. Es definiert nur den Vor- und Nachnamen einer Person.

Das zweite Modell, genannt Mitarbeiter, erbt die Felder von Person definiert aber zusätzliche Felder. Der Mitarbeiter Das Modell ist nicht abstrakt, daher befindet sich seine Tabelle in der Datenbank.

Das endgültige Modell, genannt Manager, erbt die Felder von Mitarbeiter Modell und fügt ein Feld namens hinzu Titel.

Die Beziehung zwischen den Mitarbeiter Und Manager Modelle heißt Vererbung mehrerer Tabellen. Migrieren Sie Ihre Modelle und registrieren Sie sie admin.py, starten Sie Ihren Server und navigieren Sie zum Admin-Panel. Sie sollten zwei von Django erstellte Tabellen sehen.

Wenn Sie versuchen, einen neuen Manager hinzuzufügen, werden Sie feststellen, dass dieser alle Felder aus dem enthält Mitarbeiter Modell sowie ein eigenes benutzerdefiniertes Feld.

Proxy-Modelle

Mit einem Proxy-Modell können Sie ein neues Modell erstellen, das ein vorhandenes Modell erweitert, ohne eine neue Datenbanktabelle zu erstellen. Bei dieser Art der Modellvererbung teilen sich das Proxy- und das Originalmodell dieselbe Tabelle. Mithilfe von Proxy-Modellen können Sie beispielsweise benutzerdefinierte Modelle erstellen und Standardmanager ändern.

Durch Hinzufügen können Sie ein Proxy-Modell erstellen Proxy=True im Meta Klasse. Hier ist ein Beispiel:

KlasseProxyModel(Basismodell):

KlasseMeta:
Proxy = WAHR

Die typische Verwendung eines Proxy-Modells ist dann sinnvoll, wenn ein Basismodell vorhanden ist und eine spezielle Version davon mit zusätzlichen Funktionen erstellt werden muss. Hier ist ein einfaches Beispiel:

KlassePost(Modelle. Modell):
Titel = Modelle. CharField (max_length=30)
Autor = Modelle. CharField (max_length=30)

def__str__(selbst):
zurückkehren Selbsttitel

KlasseProxyPost(Post):

KlasseMeta:
Proxy = WAHR

Dieses Codefragment definiert zwei Modelle: Post Und Mein Post. Der Post Das Modell definiert zwei Felder für Titel und Autor. Der ProxyPost Modell erbt von Post Modell.

Migrieren Sie die oben genannten Modelle und fügen Sie der dafür erstellten Tabelle einen neuen Beitrag hinzu Post Modell.

Nachdem Sie den Beitrag hinzugefügt haben, öffnen Sie den Proxy-Beiträge Tisch. Sie sollten den Beitrag finden, den Sie hinzugefügt haben Post Tisch darin.

Die Änderungen, die Sie an Beiträgen im vornehmen Proxy-Beiträge Die Tabelle wirkt sich auf den entsprechenden Beitrag in der aus Post Tisch und umgekehrt. Dies beweist, dass sie tatsächlich denselben Tisch teilen.

Sie können die ändern str() Methode des Proxy-Modells:

KlasseProxyPost(Post):

KlasseMeta:
Proxy = WAHR
Bestellung = ["Titel"]

def__str__(selbst):
zurückkehren Selbstautor

Mit dieser Änderung, a ProxyPosts Die Zeichenfolgendarstellung ist der Autor, nicht der Titel. Die Sortierung des Proxy-Modells erfolgt ebenfalls nach dem Titel statt nach dem Standard-ID-Feld.

Bei der Verwendung von Proxy-Modellen sollten Sie bedenken, dass Sie keine benutzerdefinierten Felder zu Ihrem Proxy-Modell hinzufügen können. Der Hauptanwendungsfall von Proxy-Modellen besteht darin, dass ein Modell mehrere Verhaltensweisen unterstützen soll.

Mit Proxy-Modellen können Sie das Verhalten eines vorhandenen Modells ändern, ohne dessen Felder oder die zugrunde liegende Datenbanktabellenstruktur zu ändern.

Verwenden Sie die Modellvererbung für die Wiederverwendbarkeit von Code und die Organisationsstruktur

Durch den Einsatz der verschiedenen Techniken der Modellvererbung können Sie ganz einfach wiederverwendbaren und organisierten Code für Ihr Projekt erstellen.

Durch die Modellvererbung wird redundanter Code vermieden und die Wartbarkeit und Skalierbarkeit Ihres Codes verbessert. Außerdem erleichtert es die Navigation in Ihrem Code und fördert so die effiziente Zusammenarbeit zwischen Entwicklungsteams.

Neben der Modellvererbung bietet Django auch die Vorlagenvererbung, die eine hervorragende Möglichkeit zum Verwalten und Organisieren von Vorlagen für Ihre Projekte darstellt.