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.

2voto

Yash Points 424

En termes très simples ,

Blank est différent de null.

null es purement lié à la base de données alors que blank est lié à la validation (requis dans le formulaire) .

Si null=True Django sera store empty values as NULL in the database . Si un champ a blank=True la validation du formulaire sera allow entry of an empty value . Si un champ a pour valeur blank=False, il est obligatoire.

2voto

Shedrack Points 302

La réponse est simple : Null est pour les tables de la base de données et Blank pour les formulaires de Django.

2voto

reborn Points 11

null = True || blank = True || null = True && blank = True

class TestModel(models.Model):
    field1 = models.CharField(max_length=100, null=True)
    field2 = models.CharField(max_length=100, blank=True)   # it's not a correct way
    field3 = models.CharField(max_length=100, null=True, blank=True)

LES CHAMPS DE LA BASE DE DONNÉES : MySQL

CREATE TABLE TestModel (
     `id`        INT(10)        NOT     NULL      AUTO_INCREMENT,

     `field1`    VARCHAR(100)   NULL    DEFAULT   NULL,
     `field2`    VARCHAR(100)   NOT     NULL,
     `field3`    VARCHAR(100)   NULL    DEFAULT   NULL,
)

cas-01 : null = True

db:   db   field is accepts null value
form: form field is `required`

NB: DB IS ACCEPTS NULL VALUE, BUT FORM FIELD IS REQUIRED. SO FORM IS 
SUBMITTED WHEN THIS FIELD HAVE SOME VALUE. it's good.

cas-02 : blank = True

db:   db   field is not accepts null value
form: form field is `optional`

NB: FORM IS VALID WITHOUT ANY VALUE, BUT DB IS NOT ACCEPTS NULL VALUE.
SO THE FORM IS SUBMITTED WITHOUT ANY VALUE THEN BOOM. it's worst.

cas-03 : null = True && blank = True

db:   db   field is accepts null value
form: form field is `optional`

NB: HERE FORM FIELD IS OPTIONAL & FORM IS VALID WITHOUT ANY VALUE 
& DB ALSO ACCEPTS NULL VALUE. SO, IT'S BEST TO USE `null=True && blank=True`

:)

1voto

Vansh Bhardwaj Points 121

Null - la valeur par défaut est False si c'est vrai, Django stockera empty comme null dans la base de données.

blank - par défaut, False si vrai, ce champ peut être vide

plus, goto https://docs.djangoproject.com/en/3.0/topics/db/models/

1voto

lavee_singh Points 575

Le tableau ci-dessous montre les principales différences :

+--------------------------------------------------------------------+
| Purpose                  | null=True        | blank = True         |
|--------------------------|------------------|----------------------|
| Field can be empty in DB | Do this          | Unaffected           |
|--------------------------|------------------|----------------------|
| ModelForm(required field)| Unaffected       | field not required   |
|--------------------------|------------------|----------------------|
| Form Validation          | Unaffected       | field not required   |
|--------------------------|------------------|----------------------|
| on_delete=SET_NULL       | Need this        | Unaffected           |
+--------------------------------------------------------------------+

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