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.

1voto

Carlos Ribeiro Points 43

La signification de null=True et blank=True dans le modèle dépend également de la manière dont ces champs ont été définis dans la classe de formulaire.

Supposons que vous ayez défini la classe suivante :

class Client (models.Model):
    name = models.CharField (max_length=100, blank=True)
    address = models.CharField (max_length=100, blank=False)

Si la classe de formulaire a été définie comme ceci :

class ClientForm (ModelForm):
    class Meta:
        model = Client
        fields = ['name', 'address']
        widgets = {
            'name': forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
            'address': forms.TextInput (attrs = {'class': 'form-control form-control-sm'})
        }

Ensuite, le champ "nom" ne sera pas obligatoire (en raison de la valeur "blank=True" du modèle) et le champ "adresse" sera obligatoire (en raison de la valeur "blank=False" du modèle).

Toutefois, si la classe ClientForm a été définie comme suit :

class ClientForm (ModelForm):
    class Meta:
        model = Client
        fields = ['name', 'address']

    name = forms.CharField (
        widget = forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
    )
    address = forms.CharField (
        widget = forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
    )

Ensuite, les deux champs ('nom' et 'adresse') seront obligatoires, "puisque les champs définis de manière déclarative sont laissés tels quels" ( https://docs.djangoproject.com/en/3.0/topics/forms/modelforms/ ), c'est-à-dire que la valeur par défaut de l'attribut "required" du champ de formulaire est True et que les champs "name" et "address" doivent être remplis, même si, dans le modèle, le champ a été défini comme blank=True.

1voto

Kapil Sharma Points 79

Voici sa réponse en mots simples :-

Por null = True nous disons à la base de données que ce champ du modèle pourrait être NUL, en blank = True nous disons Django que ce champ du modèle pourrait être NULL

0voto

Jesvin Vijesh S Points 439

Lorsque vous définissez null=true il fixera null dans votre base de données si le champ n'est pas rempli. Si vous définissez blank=true il ne définira aucune valeur pour le champ.

0voto

Yilmaz Points 51

blank=True peut être défini pour tout champ de modèle afin de contrôler si ce champ peut être laissé vide lors de la saisie d'une valeur dans un formulaire. Ici, nous parlons de la saisie de données.

null=True si nous mettons blank=True pour un champ, ce champ de modèle ne reçoit aucune valeur, alors la base de données ou Django doit faire quelque chose avec ce champ lorsque les données sont écrites dans la base de données. Pour tout type de contenu texte, une chaîne vide est stockée dans la base de données, il y a donc une valeur stockée dans la base de données. Pour d'autres types de champs comme les champs de date ou les nombres, nous utilisons le type de données spécial "null". "null" peut être utilisé si un champ n'a potentiellement aucune valeur, mais par défaut, Django n'autorise pas les valeurs "null". C'est pourquoi vous devez explicitement définir null=True .

Disons que vous avez mis blank=True pour tout champ non textuel, mais que vous n'avez pas spécifié "null=True", Django ne saura pas quoi stocker et une erreur se produira.

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