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.
12 votes
Vous avez de belles réponses à ce sujet ici : stackoverflow.com/questions/8159310/ et ici : stackoverflow.com/questions/4384098/
4 votes
Bonne lecture : b-list.org/weblog/2006/jun/28/
0 votes
Oui, j'ai aussi ce cas d'utilisation avec
ForeignKey
conblank=True
mais sansnull=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 sauvegardernull
dans la base de données, car chaque modèle doit être "publié", mais je veux pouvoir laisser le champ vide dans l'administration.0 votes
Je pense que vous pourriez être intéressé par [ Enregistrer les CharFields vides et invalidables comme nuls plutôt que comme une chaîne vide]( code.djangoproject.com/ticket/4136 ). Il existe de nombreuses discussions à ce sujet, et un problème très pratique que vous pouvez rencontrer (par exemple, vous voulez ajouter une url openid pour chaque utilisateur qui peut être nulle et doit être unique).
0 votes
Évitez d'utiliser null pour les champs basés sur des chaînes de caractères, tels que CharField et TextField. docs.djangoproject.com/fr/3.1/ref/models/fields