null = True vide = True default = 0Dans Django models.py, quelle est la différence entre default, null et blank?
Quelle est la différence? Quand utilisez-vous quoi?
null = True vide = True default = 0Dans Django models.py, quelle est la différence entre default, null et blank?
Quelle est la différence? Quand utilisez-vous quoi?
direct de Django model field reference:
Field.null
Si
True
, Django stocker des valeurs vides commeNULL
dans la base de données. La valeur par défaut estFalse
.Notez que les valeurs de chaînes vides seront toujours stockées sous la forme de chaînes vides, et non
NULL
. Utilisez uniquementnull=True
pour les champs non-string tels que les entiers, les booléens et les dates. Pour les deux types de champs, vous devez également définirblank=True
si vous souhaitez autoriser les valeurs vides dans les formulaires, car le paramètrenull
affecte uniquement le stockage de la base de données (voirblank
).Évitez d'utiliser
null
sur des champs à base de chaînes tels queCharField
etTextField
, sauf si vous avez une excellente raison. Si un champ basé sur une chaîne anull=True
, cela signifie qu'il a deux valeurs possibles pour "aucune donnée": NULL et la chaîne vide. Dans la plupart des cas, il est redondant d'avoir deux valeurs possibles pour "aucune donnée". La convention de Django est d'utiliser la chaîne vide, pasNULL
.
Field.blank
Si
True
, le champ est autorisé à être vide. La valeur par défaut estFalse
. Notez que cela est différent denull
.null
est purement liée à la base de données, alors queblank
est liée à la validation. Si un champ ablank=True
, la validation sur le site d'administration de Django permettra l'entrée d'une valeur vide. Si un champ ablank=False
, le champ sera requis.
Field.default
La valeur par défaut pour le champ. Cela peut être une valeur ou un objet appelable. Si appelable, il sera appelé chaque fois qu'un nouvel objet est créé.
Ne comprenez-vous pas tout cela?
De docs:
null
Si vrai, Django stockera vides valeurs NULL dans la base de données. La valeur par défaut est False.Si la valeur est True, le champ doit être vide. La valeur par défaut est False.
default
La valeur par défaut du champ .
Vous pouvez utiliser « default
» pour définir la valeur qui sera utilisée pour le champ en question si votre code défini pas explicitement à une valeur.
utilisation « blank
» à des fins de validation de formulaire - blanc = True permettra le champ à définir une valeur vide
Utilisez « null
» si vous souhaitez stocker une valeur vide comme « nul » dans la DB. Cependant, il est souvent préférable de définir des valeurs vides sur une chaîne vide ou sur 0 comme approprié pour un champ donné.
Null = None
Blank = ""
Default = ""
Est probablement aussi profane que possible.
Vide signifie que ce n'est pas NULL et a à la place une certaine valeur qui représente "vide" pour ce type de données, ce qui dans le cas d'une chaîne est probablement une chaîne vide. Pour les nombres, il pourrait être 0.
En termes de mise en œuvre:
Le champ « blanc » correspond à toutes les formes. Indique si cette valeur est requise dans le formulaire et si la validation du formulaire correspondant est effectuée. 'Vrai' autorise les valeurs vides.
Le champ 'null' correspond au niveau DB. Il sera défini comme NULL ou NOT NULL sur la base de données. Par conséquent, si un champ est vide dans admin avec blank = true, NULL est introduit dans le DB. Maintenant, cela peut générer une erreur si cette colonne particulière dans la base de données est spécifiée comme NOT NULL.
Je pense que cela pourrait ne pas être clair pour tout le monde: pour un IntegerField être nul sur les deux formes et DB, il est nécessaire d'avoir à la fois null = True et blank = True. Voir: https://code.djangoproject.com/wiki/NewbieMistakes#IntegerNULLS – fjsj
Je pense qu'il devrait être adressé par la communauté Django parce que c'est très déroutant. "N'utilisez que null = True pour les champs non-string tels que les entiers" Django pourrait le gérer de la même façon qu'il gère auto_now et auto_now_add. "Les options auto_now, auto_now_add et default sont mutuellement exclusives, seule une de ces options peut être présente." – Gregory
@Gregory: comme cela est expliqué, 'null' concerne le stockage de la base de données. Django expose un aspect utile mais relativement dangereux des bases de données SQL. C'est vraiment quelque chose qui doit être expliqué dans la documentation plutôt que limité ou imposé dans le code - il n'y a aucune limitation qui pourrait être appliquée sans casser la fonctionnalité utile (bien que potentiellement le casse-coin). –