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.

7voto

Sonia Rani Points 160

Voici la principale différence entre null=True y blank=True :

La valeur par défaut des deux null y blank est faux. Ces deux valeurs fonctionnent au niveau du champ, c'est-à-dire si nous voulons garder un champ null ou blank .

null=True mettra la valeur du champ à NULL c'est-à-dire aucune donnée. Il s'agit essentiellement de la valeur de la colonne de la base de données.

date = models.DateTimeField(null=True)

blank=True détermine si le champ sera obligatoire dans les formulaires. Cela inclut l'administrateur et vos propres formulaires personnalisés.

title = models.CharField(blank=True) // title can be kept blank. Dans la base de données ("") sera stocké. null=True blank=True Cela signifie que le champ est facultatif en toutes circonstances.

epic = models.ForeignKey(null=True, blank=True)
// The exception is CharFields() and TextFields(), which in Django are never saved as NULL. Blank values a

5voto

Yuri Kots Points 253

Lorsque nous enregistrons quelque chose dans l'administration de Django, la validation se fait en deux étapes, au niveau de Django et au niveau de la base de données. Nous ne pouvons pas enregistrer du texte dans un champ numérique.

La base de données a le type de données NULL, ce n'est rien. Lorsque Django crée des colonnes dans la base de données, il spécifie qu'elles ne peuvent pas être vides. Et si vous essayez d'enregistrer NULL, vous obtiendrez une erreur de base de données.

De même, au niveau de Django-Admin, tous les champs sont obligatoires par défaut, vous ne pouvez pas enregistrer de champ vide, Django vous enverra une erreur.

Donc, si vous voulez enregistrer un champ vide, vous devez l'autoriser au niveau de Django et de la base de données. blank=True - autorise les champs vides dans le panneau d'administration. null=True - permet d'enregistrer NULL dans la colonne de la base de données.

4voto

Tabish Points 95

null est pour la base de données et vierge est pour la validation des champs que vous voulez afficher sur l'interface utilisateur, comme le champ de texte pour obtenir le nom de famille de la personne. Si lastname=models.charfield (blank=true) il n'a pas demandé à l'utilisateur d'entrer le nom de famille car c'est un champ optionnel maintenant. Si lastname=models.charfield (null=true) alors cela signifie que si ce champ ne reçoit aucune valeur de l'utilisateur, il sera stocké dans la base de données comme une chaîne vide " ".

3voto

Vivek Points 88

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 permettra la saisie d'une valeur vide. Si un champ a pour valeur blank=False , il sera obligatoire.

3voto

Siva Sankar Points 770
Blank=False # this field is required.
Null=False # this field should not be null

Blank=True # this field is optional.
Null=True # Django uses empty string (''), not NULL.

Nota: Évitez d'utiliser null=True sur les champs basés sur des chaînes de caractères tels que CharField y TextField y FileField / ImageField .

Réf : Django null , Django blanc

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