web-dev-qa-db-fra.com

Django: Rendre certains champs dans un ModelForm requis = False

Comment rendre certains champs dans un ModelForm requis = Faux?

Si j'ai:

class ThatForm(ModelForm):
  class Meta:
    widgets = {"text": Textarea(required=False)}

Ou si j'ai:

class ThatForm(ModelForm):
  text = Textarea(required=False)

Django revient:

__init__() got an unexpected keyword argument 'required'
25
Synthead

à la suite des commentaires. Probablement oui:

class ThatForm(ModelForm):
    def __init__(self, *args, **kwargs):
        # first call parent's constructor
        super(ThatForm, self).__init__(*args, **kwargs)
        # there's a `fields` property now
        self.fields['desired_field_name'].required = False
41
yedpodtrzitko

vous devez ajouter blank = True au modèle correspondant

La documentation dit

Si le champ du modèle a blank = True, la valeur obligatoire est définie sur False dans le champ du formulaire. Sinon, requis = True.

Voir également le documentation pour blank lui-même.

23
rioted

Lorsque nous devons définir l'option requise sur un tas de champs, nous pouvons:

class ThatForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        for field in self.Meta.required:
            self.fields[field].required = True

    class Meta:
        model = User
        fields = (
            'email',
            'first_name',
            'last_name',
            'address',
            'postcode',
            'city',
            'state',
            'country',
            'company',
            'tax_id',
            'website',
            'service_notifications',
        )
        required = (
            'email',
            'first_name',
            'last_name',
            'address',
            'postcode',
            'city',
            'country',
        )
7
Valery Ramusik

ce qui suit peut convenir

class ThatForm(ModelForm):
    text = forms.CharField(required=False, widget=forms.Textarea)
4
quin