Django erstellt in der Regel keine Tabelle für abstrakte Modelle.
In Django, einem weit verbreiteten Open-Source-Web-Framework, werden Modelle verwendet, um die Datenstruktur einer Datenbank zu definieren. Ein Modell entspricht in einer relationalen Datenbank normalerweise einer Tabelle. Ein Modell enthält Felder und Verhaltensmethode, die das Speichern, Abrufen, Suche und Ändern von Daten in der Datenbank ermöglichen.
Abstract Base Classes (abstrakte Basisklassen), wie sie in Django genannt werden, sind eine Möglichkeit, gemeinsame Informationen auf mehrere Modelle zu verteilen. Sie werden in anderen Modellen als Basisklassen verwendet, verteilen jedoch keine Datenbanktabelle oder Migration für sich selbst.
Laut der offiziellen Django Dokumentation: “Wenn ein Model als Abstrakt definiert ist, dann verwendet Django dieses Model als Basis und erweitert die in diesem Model definierten Felder auf jedes Model, das davon erbt. Bei den abgeleiteten Modellen erstellt Django dann eine Datenbanktabelle. Aber für das abstrakte Model selbst wird keine Tabelle erstellt.”
Zum Beispiel, wenn wir ein abstraktes Modell ‘Fahrzeug’ mit den Feldern ‘Marke’ und ‘Modell’ erstellen, und dann zwei Modelle ‘Auto’ und ‘Motorrad’ erstellen, die von Fahrzeug erben, dann wird Django zwei Tabellen in der Datenbank erstellen: eine für ‘Auto’ und eine für ‘Motorrad’. Jede Tabelle wird die Felder ‘Marke’ und ‘Modell’ enthalten. Aber es wird keine Tabelle für ‘Fahrzeug’ geben.
Es gibt jedoch eine Ausnahme. Wenn Sie das Meta-Attribut ‘abstract = False’ in Ihrem abstrakten Modell festlegen, wird Django eine Tabelle für dieses Modell erstellen.
Quellen:
- Django Dokumentation: https://docs.djangoproject.com/en/3.1/topics/db/models/#abstract-base-classes
- Django Dokumentation: https://docs.djangoproject.com/en/3.2/topics/db/models/#meta-options
- Buch “Two Scoops of Django” von Audrey Roy Greenfeld und Daniel Roy Greenfeld: https://www.feldroy.com/products/two-scoops-of-django-3-x