1138 votes

Quelle est la différence entre null=True et blank=True dans Django ?

Lorsque nous ajoutons un champ de base de données dans django, nous écrivons généralement :

models.CharField(max_length=100, null=True, blank=True)

La même chose est faite avec ForeignKey , DecimalField etc. Quelle est la différence fondamentale entre le fait d'avoir

  1. null=True sólo
  2. blank=True sólo
  3. null=True , blank=True

par rapport à différents ( CharField , ForeignKey , ManyToManyField , DateTimeField ). Quels sont les avantages/inconvénients de l'utilisation de 1/2/3 ?

12 votes

Vous avez de belles réponses à ce sujet ici : stackoverflow.com/questions/8159310/ et ici : stackoverflow.com/questions/4384098/

4 votes

0 votes

Oui, j'ai aussi ce cas d'utilisation avec ForeignKey con blank=True mais sans null=True . Lorsque le modèle est enregistré, je veux le "publier" automatiquement en créant une entrée publiée à partir de celui-ci. Je ne peux donc pas sauvegarder null dans la base de données, car chaque modèle doit être "publié", mais je veux pouvoir laisser le champ vide dans l'administration.

31voto

Ranju R Points 131

Tout simplement null=True définit la base de données doit accepter NULL les valeurs, d'autre part blank=True définit, lors de la validation du formulaire, si ce champ doit accepter ou non des valeurs vierges (Si blank=True il accepte le formulaire sans valeur dans ce champ et blank=False [valeur par défaut] lors de la validation du formulaire, il affichera Ce champ est obligatoire erreur.

null=True/False lié à la base de données

blank=True/False lié à la validation des formulaires

18voto

Stryker Points 1474

Voici un exemple du champ avec blank= True y null=True

description = models.TextField(blank=True, null= True)

Dans ce cas : blank = True : indique à notre formulaire qu'il est possible de laisser le champ de description vide.

et

null = True L'option : indique à notre base de données qu'il est possible d'enregistrer une valeur nulle dans notre champ de données et de ne pas donner d'erreur.

12voto

Nitin Nain Points 1384

Si vous définissez null=True il permettra à la valeur de votre colonne de base de données d'être définie en tant que NULL . Si vous ne définissez que blank=True django définira la nouvelle valeur par défaut de la colonne comme étant égale à "" .

Il y a un point où null=True serait nécessaire même sur un CharField ou TextField et c'est à ce moment que la base de données a le unique pour la colonne. Dans ce cas, vous devrez utiliser ceci :

a_unique_string = models.CharField(blank=True, null=True, unique=True)

Il est préférable de sauter le null=True para non unique CharField ou TextField . Sinon, certains champs seront définis comme NULL tandis que d'autres comme "" et vous devrez vérifier la valeur du champ pour l'option NULL à chaque fois.

9voto

sharif_42 Points 361

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

Nul : 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.

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

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.

C'est là que 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.

8voto

Milad Kh Points 831
null = True

Cela signifie qu'il n'y a pas de contrainte de base de données pour le champ à remplir, donc vous pouvez avoir un objet avec une valeur nulle pour le champ qui a cette option.

blank = True

Cela signifie qu'il n'y a pas de contrainte de validation dans les formulaires django. Ainsi, lorsque vous remplissez un formulaire modelForm pour ce modèle, vous pouvez laisser le champ avec cette option non rempli.

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