95 votes

Django modelform Champ non obligatoire

J'ai un formulaire comme celui-ci :

class My_Form(ModelForm):
    class Meta:
        model = My_Class
        fields = ('first_name', 'last_name' , 'address')

Comment puis-je définir le champ d'adresse comme facultatif ?

129voto

madzohan Points 7404
class My_Form(forms.ModelForm):
    class Meta:
        model = My_Class
        fields = ('first_name', 'last_name' , 'address')

    def __init__(self, *args, **kwargs):
        super(My_Form, self).__init__(*args, **kwargs)
        self.fields['address'].required = False

116voto

akshar Points 2286

Je suppose que votre modèle est comme ça :

class My_Class(models.Model):

    address = models.CharField()

Votre formulaire pour Django version < 1.8 :

class My_Form(ModelForm):

    address = forms.CharField(required=False)

    class Meta:
        model = My_Class
        fields = ('first_name', 'last_name' , 'address')

Votre formulaire pour Django version > 1.8 :

class My_Form(ModelForm):

    address = forms.CharField(blank=True)

    class Meta:
        model = My_Class
        fields = ('first_name', 'last_name' , 'address')

24voto

Diego Magalhães Points 1308
field = models.CharField(max_length=9, default='', blank=True)

Il suffit d'ajouter blank=True dans le champ de votre modèle et il ne sera pas nécessaire lorsque vous utilisez modelforms .

"Si le champ du modèle a blank=True alors le champ du formulaire est défini comme étant faux. Autrement, required=True ."

source : https://docs.djangoproject.com/en/3.1/topics/forms/modelforms/#field-types

8voto

Atma Points 5393

Il faudrait ajouter :

address = forms.CharField(required=False)

6voto

Vishal Singh Points 362

Solution : utilisez les deux blank=True , null=True .

my_field = models.PositiveIntegerField(blank=True, null=True)

Explication :

Si vous utilisez null=True

my_field = models.PositiveIntegerField(null=True)

entonces my_field est nécessaire, avec * à côté d'elle dans le formulaire et vous ne pouvez pas soumettre la valeur vide.

Si vous utilisez blank=True

my_field = models.PositiveIntegerField(blank=True)

entonces my_field n'est pas nécessaire, il n'y aura pas de * à côté de lui dans le formulaire et vous ne pouvez pas soumettre la valeur. Mais il obtiendra null field not allowed.

Remarque : le fait de marquer comme non requis et d'autoriser les champs nuls sont deux choses différentes.

Conseil de pro : Lisez l'erreur plus attentivement que la documentation.

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