Rolle von models.Model
Zunächst ist die grundlegendste Modellklasse in Django models.Model
. Alle Django-Modelle werden durch Vererbung von models.Model
definiert. Diese Klasse dient der Zuordnung meiner definierten Modelle zu Datenbanktabellen. Jede Modellklasse entspricht einer Tabelle der Datenbank, und die darin enthaltenen Felder werden zu den Spalten(columns) der Tabelle.
Wichtig ist, dass durch die Vererbung von models.Model
mehrere nützliche Methoden bereitgestellt werden, die standardmäßig verwendet werden können:
save()
: Methode zum Speichern eines Objekts in der Datenbankdelete()
: Methode zum Löschen eines Objektsobjects.create()
: Methode zum Erstellen und Speichern eines neuen Objektsobjects.filter()
: Methode zum Abrufen von Objekten, die bestimmte Bedingungen erfüllen
Dank dieser Funktionen kann ich die leistungsstarken Funktionen des Django ORM einfach nutzen, indem ich nur von models.Model
erbe.
Beziehung zwischen AbstractUser und CustomUser
Django bietet standardmäßig ein integriertes Benutzermodell namens auth.User
. Dieses Modell kann standardmäßig verwendet werden, aber in den meisten Fällen möchten Benutzer das Benutzer-Modell anpassen. Beispielsweise möchte man möglicherweise zusätzliche Felder wie Telefonnummer oder Adresse einfügen.
Hier kommt AbstractUser
ins Spiel. Diese Klasse ist eine abstrakte Klasse, die es ermöglicht, das von Django bereitgestellte Benutzer-Modell (d. h. auth.User
) zu erweitern. Da auch AbstractUser
von models.Model
erbt, kann ich, wenn ich AbstractUser
erbe und CustomUser
definiere, alle Funktionen des ORM nahtlos nutzen.
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)
So definiertes CustomUser
-Modell bietet alle Funktionen, die mit der Benutzer-Authentifizierung zusammenhängen, und ermöglicht gleichzeitig die freie Definition zusätzlicher Felder.
Rolle von models.Manager und AbstractUserManager
In Django-Modellen fungiert models.Manager
als Schnittstelle zur Verarbeitung von Abfragen an die Datenbank. Über den standardmäßig bereitgestellten objects
-Manager können Daten einfach abgerufen oder manipuliert werden. Dazu gehören Methoden wie filter()
, get()
, create()
.
Beim Benutzer-Modell kann AbstractUserManager
genutzt werden, wenn eine Benutzererstellung erforderlich ist. AbstractUserManager
erbt von models.Manager
und bietet Methoden, die speziell für die Benutzererstellung gedacht sind (create_user()
, create_superuser()
).
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
# Benutzererstellungslogik
pass
def create_superuser(self, email, password=None, **extra_fields):
# Superusererstellungslogik
pass
Durch die Anpassung der Benutzererstellungslogik zur Implementierung von CustomUserManager
kann das Benutzer-Modell flexibel verwaltet werden.
Zusammenfassung: Beziehung zwischen Modellklassen
Zusammenfassend lässt sich sagen, dass die Beziehungen zwischen den Modellklassen in Django wie folgt sind:
models.Model
: Basis-Klasse für alle Django-Modelle. Diese wird vererbt, um mit der Datenbank zu interagieren und ORM-Funktionalitäten bereitzustellen.AbstractUser
: Abstrakte Klasse, die vonmodels.Model
erbt. Sie ermöglicht die Definition vonCustomUser
.AbstractUserManager
: Erbt vonmodels.Manager
und ermöglicht die Anpassung der Benutzererstellungslogik.
Wenn Sie diese Struktur verstehen und nutzen, können Sie das Modellsystem von Django effizienter gestalten.
Add a New Comment