De rol van models.Model
De basis model klasse in Django is models.Model
. Alle Django-modellen worden gedefinieerd door models.Model
te erven. Deze klasse zorgt ervoor dat mijn gedefinieerde model wordt gemapt naar een database tabel. Elke model klasse is als het ware een tabel van de database en de velden binnen de klasse zijn de kolommen van die tabel.
Een belangrijk punt is dat er meerdere handige methoden worden aangeboden die standaard beschikbaar zijn door het erven van models.Model
:
save()
: methode om een object op te slaan in de databasedelete()
: methode om een object te verwijderenobjects.create()
: methode om een nieuw object te creëren en op te slaanobjects.filter()
: methode om objecten op te vragen die aan bepaalde voorwaarden voldoen
Met deze functionaliteiten kun je eenvoudig de krachtige functies van de Django ORM gebruiken door simpelweg models.Model
te erven.
De relatie tussen AbstractUser en CustomUser
Django heeft standaard een ingebouwd gebruikersmodel genaamd auth.User
. Je kunt dit model standaard gebruiken, maar in de meeste gevallen wil je het gebruikersmodel graag aanpassen. Bijvoorbeeld, als je extra velden zoals telefoonnummer of adres wilt toevoegen.
Wat je in dat geval gebruikt is AbstractUser
. Deze klasse is een abstracte klasse die het mogelijk maakt om het standaard gebruikersmodel van Django (dat wil zeggen auth.User
) uit te breiden. Aangezien AbstractUser
ook models.Model
erft, kan ik CustomUser
definiëren door AbstractUser
te erven, en heb ik toegang tot alle functionaliteiten van de ORM.
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)
Het zo gedefinieerde CustomUser
model biedt alle functionaliteiten met betrekking tot gebruikersauthenticatie, terwijl je extra velden vrij kunt definiëren.
De rol van models.Manager en AbstractUserManager
In een Django model fungeert models.Manager
als een interface voor het verwerken van queries naar de database. Via de standaard aangeboden objects
manager kan je gemakkelijk data opvragen of manipuleren. Bijvoorbeeld, methoden zoals filter()
, get()
, create()
zijn beschikbaar.
Wanneer de gebruikersmodel logica voor het creëren van gebruikers nodig heeft, kan AbstractUserManager
worden gebruikt. AbstractUserManager
erft van models.Manager
en biedt methoden die zijn gespecialiseerd in het maken van gebruikers (create_user()
, create_superuser()
).
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
# Logica voor het creëren van een gebruiker
pass
def create_superuser(self, email, password=None, **extra_fields):
# Logica voor het creëren van een superuser
pass
Door de gebruikerscreatielogica aan te passen met CustomUserManager
, kun je de gebruikersmodel flexibeler beheren.
Samenvatting: de relaties tussen modelklassen
Samenvattend zijn de relaties tussen de modelklassen in Django als volgt:
models.Model
: de basis klasse voor alle Django-modellen. Hierdoor worden deze gelinkt aan de database en biedt het ORM functionaliteiten.AbstractUser
: een abstracte klasse diemodels.Model
erft. Dit stelt ons in staat omCustomUser
te definiëren.AbstractUserManager
: erft vanmodels.Manager
en maakt het mogelijk om de logica van gebruikerscreatie aan te passen.
Het begrijpen en toepassen van deze structuur stelt je in staat om het model systeem van Django efficiënter te ontwerpen.
댓글이 없습니다.