2010-12-08 38 views

Répondre

41

direct de Django model field reference:

Field.null

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

Notez que les valeurs de chaînes vides seront toujours stockées sous la forme de chaînes vides, et non NULL. Utilisez uniquement null=True pour les champs non-string tels que les entiers, les booléens et les dates. Pour les deux types de champs, vous devez é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 à base de 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 "aucune donnée". La convention de Django est d'utiliser la chaîne vide, pas NULL.

Field.blank

Si True, le champ est autorisé à être vide. La valeur par défaut est False. Notez que cela est différent de null. null est purement liée à la base de données, alors que blank est liée à la validation. Si un champ a blank=True, la validation sur le site d'administration de Django permettra l'entrée 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éé.

Ne comprenez-vous pas tout cela?

+18

Je pense que cela pourrait ne pas être clair pour tout le monde: pour un IntegerField être nul sur les deux formes et DB, il est nécessaire d'avoir à la fois null = True et blank = True. Voir: https://code.djangoproject.com/wiki/NewbieMistakes#IntegerNULLS – fjsj

+0

Je pense qu'il devrait être adressé par la communauté Django parce que c'est très déroutant. "N'utilisez que null = True pour les champs non-string tels que les entiers" Django pourrait le gérer de la même façon qu'il gère auto_now et auto_now_add. "Les options auto_now, auto_now_add et default sont mutuellement exclusives, seule une de ces options peut être présente." – Gregory

+1

@Gregory: comme cela est expliqué, 'null' concerne le stockage de la base de données. Django expose un aspect utile mais relativement dangereux des bases de données SQL. C'est vraiment quelque chose qui doit être expliqué dans la documentation plutôt que limité ou imposé dans le code - il n'y a aucune limitation qui pourrait être appliquée sans casser la fonctionnalité utile (bien que potentiellement le casse-coin). –

11

De docs:

null Si vrai, Django stockera vides valeurs NULL dans la base de données. La valeur par défaut est False.Si la valeur est True, le champ doit être vide. La valeur par défaut est False.

default La valeur par défaut du champ .

Vous pouvez utiliser « default » pour définir la valeur qui sera utilisée pour le champ en question si votre code défini pas explicitement à une valeur.

utilisation « blank » à des fins de validation de formulaire - blanc = True permettra le champ à définir une valeur vide

Utilisez « null » si vous souhaitez stocker une valeur vide comme « nul » dans la DB. Cependant, il est souvent préférable de définir des valeurs vides sur une chaîne vide ou sur 0 comme approprié pour un champ donné.

-5
Null = None 
Blank = "" 
Default = "" 

Est probablement aussi profane que possible.

Vide signifie que ce n'est pas NULL et a à la place une certaine valeur qui représente "vide" pour ce type de données, ce qui dans le cas d'une chaîne est probablement une chaîne vide. Pour les nombres, il pourrait être 0.

1

En termes de mise en œuvre:

Le champ « blanc » correspond à toutes les formes. Indique si cette valeur est requise dans le formulaire et si la validation du formulaire correspondant est effectuée. 'Vrai' autorise les valeurs vides.

Le champ 'null' correspond au niveau DB. Il sera défini comme NULL ou NOT NULL sur la base de données. Par conséquent, si un champ est vide dans admin avec blank = true, NULL est introduit dans le DB. 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.