67 votes

Dans le fichier Django models.py, quelle est la différence entre default, null et blank ?

  • null=True
  • blank=True
  • default = 0

Quelle est la différence ? Quand utilisez-vous quoi ?

75voto

Chris Morgan Points 22285

En direct de Référence du champ du modèle Django :

Field.null

Si True Django stockera les valeurs vides comme NULL dans la base de données. La valeur par défaut est False .

Notez que les valeurs de chaînes vides seront toujours stockées en tant que chaînes vides, et non en tant que NULL . N'utilisez que null=True pour les champs non textuels tels que les entiers, les booléens et les dates. Pour les deux types de champs, vous devrez également définir blank=True si vous souhaitez autoriser les valeurs vides dans les formulaires, comme le fait l'option null n'affecte que le stockage dans la base de données (voir blank ).

Évitez d'utiliser null sur les champs basés sur des chaînes de caractères tels que CharField y TextField sauf si vous avez une excellente raison. Si un champ basé sur une chaîne de caractères a null=True ce qui signifie qu'il y 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 "pas de données" ; la convention de Django est d'utiliser la chaîne vide, et pas NULL .

Field.blank

Si True le champ peut être vide. La valeur par défaut est False .

Notez que ceci est différent de null . null est purement lié à la base de données, tandis que blank est lié à la validation. Si un champ a blank=True La validation sur le site d'administration de Django autorise la saisie d'une valeur vide. Si un champ a blank=False le champ sera obligatoire.

Field.default

La valeur par défaut du champ. Il peut s'agir d'une valeur ou d'un objet appelable. S'il est appelable, il sera appelé chaque fois qu'un nouvel objet sera créé.

19voto

Ben Points 4937

De docs :

null Si Vrai, Django stockera les valeurs vides comme NULL dans la base de données. La valeur par défaut est False.

blank Si True, le champ peut être être vide. La valeur par défaut est False.

default La valeur par défaut pour le champ.

Vous pouvez utiliser " default "pour définir la valeur qui sera utilisée pour le champ en question si votre code ne lui attribue pas explicitement une valeur.

Utiliser " blank "blank=True permettra au champ de prendre une valeur vide.

Utiliser " null "si vous souhaitez enregistrer une valeur vide comme "null" dans la base de données. Cependant, il est souvent préférable de donner aux valeurs vides la valeur d'une chaîne vide ou la valeur 0, selon le cas, pour un champ donné.

12voto

saran3h Points 1541

Je sais que vous avez déjà votre réponse mais jusqu'à ce jour, il est difficile de juger s'il faut mettre null=True o blank=True o both à un champ. Je pense personnellement qu'il est assez inutile et déroutant de fournir autant d'options aux développeurs. Laissez-les gérer les blancs ou les nuls comme ils le souhaitent.

Je suis ce tableau (tiré du livre "Two Scoops of Django") : When to use null and blank

When to use null and blank

2voto

user3725732 Points 3

En termes de mise en œuvre :

Le champ "vide" correspond à tous les formulaires. Indique si cette valeur est requise dans le formulaire et si la validation correspondante est effectuée. La valeur 'True' autorise les valeurs vides.

Le champ 'null' correspond au niveau de la base de données. Il sera défini comme NULL ou NOT NULL au niveau de la BD.

Ainsi, si vous laissez un champ vide dans l'administration avec blank=true, NULL est introduit dans la base de données. Cela peut entraîner une erreur si cette colonne particulière dans la base de données est spécifiée comme NOT NULL.

1voto

sharif_42 Points 361

Nulle : Il est lié à la base de données. Définit si une colonne de base de données donnée accepte ou non les valeurs nulles.

vierge : Il est lié à la validation. Il sera utilisé pendant la validation des formulaires, lors de l'appel à form.is_valid().

Défaut : Tout le temps il stocke la valeur donnée (valeur par défaut) au champ si on ne fournit pas de valeur pour ce champ.

Les valeurs par défaut de null et blank sont Faux .

Cela dit, il est parfaitement possible d'avoir un champ avec null=True et blank=False. Cela signifie qu'au niveau de la base de données, le champ peut être NULL, mais qu'au niveau de l'application, c'est un champ obligatoire.

Maintenant, la plupart des développeurs se trompent : Définir null=True pour les champs basés sur des chaînes de caractères tels que CharField et TextField. Évitez de le faire. Sinon, vous finirez par avoir deux valeurs possibles pour "aucune donnée", c'est-à-dire : Aucun et une chaîne vide. Avoir deux valeurs possibles pour "aucune donnée" est redondant. La convention Django est d'utiliser la chaîne vide, et non NULL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X