web-dev-qa-db-fra.com

Dans 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?

43
TIMEX

Direct from Référence du champ de modèle Django :

Field.null

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

Notez que les valeurs de chaîne vides seront toujours stockées en tant que chaînes vides, et non pas en tant que NULL. Utilisez uniquement null=True pour les champs autres que des chaînes 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, car le paramètre null affecte uniquement le stockage de la base de données (voir blank).

Évitez d’utiliser null sur des champs basés sur des chaînes tels que CharField et TextField sauf si vous avez une excellente raison. Si un champ basé sur une chaîne a null=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 «pas de données»; la convention Django consiste à utiliser la chaîne vide, et non pas NULL.

 

Field.blank

Si True, le champ est autorisé à ê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, alors que blank est lié à la validation. Si un champ a blank=True, la validation sur le site d’administration de Django autorisera la saisie d’une valeur vide. Si un champ a blank=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éé.

Tu ne comprends pas tout ça?

45
Chris Morgan

De docs :

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

blank Si True, le champ est autorisé à ê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 le définit pas explicitement.

Utilisez "blank" à des fins de validation du formulaire - blank = True permet de définir une valeur vide pour le champ.

Utilisez "null" si vous souhaitez stocker une valeur vide sous la forme "null" dans la base de données. Cependant, il est souvent préférable de définir les valeurs vides sur une chaîne vide ou sur 0, selon le cas, pour un champ donné.

14
Ben Regenspan

En termes de mise en œuvre:

Le champ "vide" correspond à tous les formulaires. Spécifie si cette valeur est requise dans le formulaire et que la validation du formulaire correspondant est effectuée. 'True' autorise les valeurs vides.

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

Par conséquent, si vous laissez un champ vide dans admin avec blank = true, NULL est introduit dans la base de données. 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.

1
aliasav

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 ou blank=True ou both dans un champ Personnellement, j'estime qu'il est assez inutile et déroutant de proposer autant de solutions aux développeurs. Laissez le gérer les null ou les blancs comme ils le souhaitent. 

Je suis ce tableau:  When to use null and blank

 When to use null and blank

1
saran3h