Bij het schrijven van modellen in Django is een van de veelgebruikte veldopties blank=True
en null=True
. Beide opties bieden de mogelijkheid om een veld leeg te laten, maar ze verschillen in hun doel en werkelijke functie. In dit artikel worden de betekenis en de verschillen van elk van deze opties uitgelegd, evenals wanneer en hoe je ze kunt toepassen.
1. blank=True
De blank=True
optie bepaalt of een veld kan worden leeggelaten tijdens de formulier validatiefase. Dit heeft voornamelijk betrekking op Django's formulieren.
- Betekenis: Zorgt ervoor dat er geen validatiefouten optreden als het veld leeg is.
- Toepassingssituatie: Wordt gebruikt als je toelating wilt geven dat een veld leeg is bij invoer van de gebruiker. Bijvoorbeeld, als een bepaald veld in de profielinformatie van de gebruiker niet verplicht is en kan worden overgeslagen, gebruik je
blank=True
.
from django.db import models
class Profile(models.Model):
bio = models.TextField(blank=True) # Invoerd veld voor zelfbeschrijving dat niet verplicht is
2. null=True
null=True
staat toe dat de waarde van dat veld NULL kan zijn in de database. Dit bepaalt of lege waarden zijn toegestaan op database-niveau.
- Betekenis: Staat toe dat een veld NULL waarde heeft in de database.
- Toepassingssituatie: Wordt gebruikt wanneer je moet omgaan met lege waarden die in de database moeten worden opgeslagen. Als het geen stringveld is en
null=True
niet is ingesteld, slaat Django een standaardwaarde op in plaats van een lege waarde. Bijvoorbeeld, als je NULL wilt gebruiken wanneer er geen waarde is voor een datumn of getalveld, moet jenull=True
instellen.
from django.db import models
class Event(models.Model):
end_date = models.DateTimeField(null=True) # veld om evenementen zonder einddatum toe te staan
3. Het verschil tussen blank=True
en null=True
Het verschil tussen de twee opties is voornamelijk gerelateerd aan formulier validatie en database opslagmethoden.
Optie | Functieomschrijving | Toepassingsdoel |
---|---|---|
blank=True |
Veld kan leeg zijn tijdens formulier validatie | Gebruikersinvoer is niet verplicht |
null=True |
Sta NULL waarde toe in de database | Veld kan leeg zijn in de database |
In Django staat blank=True
voor het toestaan van leeglate tijdens formulierniveau en null=True
voor het toestaan van leeglate op databasenniveau.
4. Wanneer gebruik je beide opties samen?
Over het algemeen wordt alleen voor stringvelden (CharField
, TextField
, enz.) blank=True
ingesteld en wordt null=True
niet gebruikt. Django behandelt lege strings (''
) en NULL-waarden apart, zodat een lege string doorgaans als lege waarde in plaats van NULL wordt behandeld.
Aan de andere kant, als het gaat om niet-stringvelden (bijv. DateTimeField
, IntegerField
) en het veld niet verplicht is, is het aan te raden om zowel blank=True
als null=True
samen te gebruiken. Hierdoor kan het veld leeg blijven in het formulier en kan NULL-waarde in de database worden opgeslagen.
class Task(models.Model):
name = models.CharField(max_length=200, blank=True) # alleen blank=True voor stringvelden
due_date = models.DateTimeField(blank=True, null=True) # use both blank=True and null=True voor datumvelden
5. Samenvatting
blank=True
: Voorkomt dat er een fout optreedt als het veld leeg is in het formulier, voornamelijk gebruikt als gebruikersinvoer niet verplicht is.null=True
: Staat toe dat een veld NULL waarde heeft in de database, wordt gebruikt bij niet-stringvelden.- Gecombineerd gebruik: Gebruik
blank=True
ennull=True
samen als je niet-stringvelden optioneel leeg wilt laten.
Door deze twee opties op de juiste manier te gebruiken bij het ontwerpen van Django-modellen, kun je de flexibiliteit van de database-structuur en gebruikersinvoer vergroten.
In de volgende post zullen we kijken naar de related_name
veldoptie die vaak wordt gebruikt bij het instellen van ForeignKey. Dit is ook een zeer nuttige optie in ORM, dus ik hoop dat je ook naar de volgende post zult kijken.
댓글이 없습니다.