Bei der Entwicklung von Django-Anwendungen ist eines der ersten Dinge, mit denen wir konfrontiert werden, das grundlegende Datenbankmodell, das von models.Model
erbt. In vielen Tutorials wird es nur nachgeahmt, aber wenn man die Struktur und die Prinzipien etwas tiefer betrachtet, kann man die Vorteile von Django ORM effektiver nutzen. In diesem Artikel werden wir uns eingehender mit der Vererbungsstruktur der Django-Modelle und der Definition benutzerdefinierter Benutzermodelle beschäftigen und die Zusammenstellung des Modellsystems von Django näher untersuchen.
models.Model: Die Basis aller Modelle
In Django erben alle Modellklassen von models.Model
. Diese models.Model
-Klasse spielt eine zentrale Rolle bei der Abbildung auf Datenbanktabellen. Jedes Modell wird zur Datenbanktabelle, und die Felder des Modells entsprechen den Spalten der Tabelle. Die Methoden, die diese Basisklasse bietet, ermöglichen die Kernfunktionen von Django ORM.
save()
: Speichert das Objekt in der Datenbankdelete()
: Löscht das Objektobjects.create()
: Erstellt und speichert ein Objektobjects.filter()
: Abfrage von Objekten, die bestimmte Bedingungen erfüllen
Allein durch die Ableitung von models.Model
kann man die Funktionen von Django ORM ohne Einschränkungen nutzen. Dies ist ein Beispiel dafür, wie mächtig Django ORM gestaltet ist.
AbstractUser und CustomUser: Erweiterbare Benutzermodelle
Django bietet standardmäßig das auth.User
-Modell an, aber die Anforderungen zur Erweiterung und Anpassung von Benutzermodellen variieren von Projekt zu Projekt. AbstractUser
ist das abstrakte Benutzermodell von Django, das unter Berücksichtigung dieser Erweiterbarkeit bereitgestellt wird. Beispielsweise wird es verwendet, wenn man ein E-Mail-Feld oder Felder wie Telefonnummer oder Adresse hinzufügen möchte.
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
phone_number = models.CharField(max_length=15, blank=True)
address = models.CharField(max_length=255, blank=True)

Durch die Definition von CustomUser
auf diese Weise kann man die Funktionen von AbstractUser
übernehmen und benutzerdefinierte Felder hinzufügen. Da AbstractUser
ebenfalls von models.Model
erbt, kann man die grundlegenden Methoden von Django ORM weiterhin verwenden.
models.Manager und AbstractUserManager: Abfragen der Datenbank und Logik zur Benutzererstellung
Der models.Manager
, welcher die Rolle des Managers eines Modells übernimmt, ist eine Schnittstelle zur Verarbeitung von Abfragen an die Datenbank, die es ermöglicht, Methoden wie filter()
, get()
und create()
über den standardmäßigen Manager objects
zu verwenden. Wenn ein manager-spezifisches Benutzer-Modell wie CustomUser erforderlich ist, bietet Django die Manager-Klasse AbstractUserManager
an. Mit dieser Klasse kann man die Logik zur Benutzererstellung anpassen.
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
# Logik zur Benutzererstellung
pass
def create_superuser(self, email, password=None, **extra_fields):
# Logik zur Erstellung eines Superusers
pass
Durch die Verwendung eines solchen Managers kann man flexibel auf verschiedene Situationen reagieren, die während des Benutzererstellungsprozesses auftreten können. AbstractUserManager
erweitert models.Manager
, sodass sie alle grundlegenden Funktionen für Datenbankabfragen beinhaltet.
Verständnis der Django-Modellvererbung
Ein Verständnis der Modellvererbung in Django ermöglicht ein effizienteres Design und eine effektivere Implementierung von Modellen. Dies kann kurz zusammengefasst werden:
models.Model
: Die Basis-Klasse aller Django-Modelle, die eine Zuordnung zur Datenbank herstellt und ORM-Funktionen bietet.AbstractUser
: Eine abstrakte Klasse, die vonmodels.Model
erbt. Durch die Vererbung von dieser Klasse kannCustomUser
als benutzerdefiniertes Benutzer-Modell mit den Funktionalitäten vonmodels.Model
einfach definiert werden.AbstractUserManager
: Ein Manager, der vonmodels.Manager
erbt und spezifisch für die Benutzererstellung ist. Diese Klasse ermöglicht es, die Logik zur Benutzererstellung einfach anzupassen.
Zusammenfassend lässt sich sagen, dass die Struktur von Django-Modellen sehr flexibel und gleichzeitig leistungsstark gestaltet ist. Auch bei der Erweiterung von Benutzermodellen und dem Hinzufügen benutzerdefinierter Felder kann man durch ein Verständnis der ORM-Funktionalitäten und Strukturen von AbstractUser
und models.Model
ein effizienteres sowie skalierbares Datenbankdesign erreichen. Wenn man diese Modellstruktur von Django gut nutzt, kann der Entwickler mit weniger Aufwand komplexe Datenbankmodelle aufbauen.
Add a New Comment