python - many - django tutorial




différencier null=True, vide=True dans django (6)

Comme dit dans Django Model Field référence: Link

Options de champ

Les arguments suivants sont disponibles pour tous les types de champs. Tous sont optionnels.


null

Field.null

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

Évitez d'utiliser null sur les champs basés sur des chaînes tels que CharField et TextField car les valeurs de chaînes vides seront toujours stockées comme des chaînes vides, pas comme NULL . 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 de Django est d'utiliser la chaîne vide, pas NULL .

Pour les champs basés sur des chaînes et non sur des chaînes, vous devrez également définir blank=True si vous souhaitez autoriser des valeurs vides dans les formulaires, car le paramètre null n'affecte que le stockage de la base de données (voir blank ).

Remarque

Lors de l'utilisation du backend de base de données Oracle, la valeur NULL sera stockée pour indiquer la chaîne vide indépendamment de cet attribut


blank

Field.blank

Si la valeur est 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, tandis que le blank est lié à la validation. Si un champ a la valeur blank=True , la validation du formulaire autorisera l'entrée d'une valeur vide. Si un champ est blank=False , le champ sera requis.

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 en ayant

  1. null=True seulement
  2. blank=True seulement
  3. null=True , blank=True

en ce qui concerne différents CharField ( CharField , ForeignKey , ManyToManyField , DateTimeField ). Quels sont les avantages / inconvénients de l'utilisation de 1/2/3?



Quand on sauvegarde quelque chose dans l'admin Django, deux étapes de validation se passent, au niveau Django et au niveau de la base de données. Nous ne pouvons pas enregistrer de 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 l'erreur de base de données.

Aussi au niveau Django-Admin, tous les champs sont obligatoires par défaut, vous ne pouvez pas sauvegarder le 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 - autorisera le champ vide dans le panneau d'administration null = True - permettra d'enregistrer NULL dans la colonne de la base de données.


Simply null=True définit la base de données devrait accepter les valeurs NULL , d'autre part blank=True définit à la validation du formulaire ce champ devrait accepter les valeurs vides ou non (Si blank=True , accepter le formulaire sans valeur dans ce champ et blank=False ] sur la validation du formulaire, il montrera Ce champ est requis erreur.

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

blank=True/False lié à la validation du formulaire


Voici un exemple du champ avec blank = true et null = true description = models.TextField (vide = True, null = True)

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

et

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


null est pour la valeur de la colonne DataBase

null=True définit NULL (contre NOT NULL ) sur la colonne de votre base de données. Les valeurs vides pour les types de champs Django tels que DateTimeField ou ForeignKey seront stockées en tant que NULL dans la base de données.

blank est pour l'exigence de champ dans les formes

blank=True détermine si le champ sera requis dans les formulaires. Cela inclut l'administrateur et vos propres formulaires personnalisés. Si blank=True alors le champ ne sera pas requis, alors que s'il est False le champ ne peut pas être vide.

La combinaison des deux est si fréquente, car si vous autorisez un champ à être vide dans votre formulaire, vous aurez également besoin de votre base de données pour autoriser les valeurs NULL pour ce champ. Les exceptions sont CharField et TextField , qui dans Django ne sont jamais enregistrés comme NULL . Les valeurs vides sont stockées dans le DB sous la forme d'une chaîne vide ( '' ).

Quelques exemples:

models.DateTimeField(blank=True) # raises IntegrityError if blank

models.DateTimeField(null=True) # NULL allowed, but must be filled out in a form

Évidemment, ces deux options n'ont pas de sens logique à utiliser (cependant, il peut y avoir un cas d'utilisation pour null=True, blank=False si vous voulez qu'un champ soit toujours requis dans les formulaires, mais optionnel quand vous traitez un objet par quelque chose comme la coquille.)

models.CharField(blank=True) # No problem, blank is stored as ''

models.CharField(null=True) # NULL allowed, but will never be set as NULL

CHAR types CHAR et TEXT ne sont jamais enregistrés comme NULL par Django, donc null=True est inutile. Toutefois, vous pouvez définir manuellement l'un de ces champs sur None pour forcer la NULL . Si vous avez un scénario où cela pourrait être nécessaire, vous devez toujours inclure null=True .





django-models