Как условно удалить поле формы = обязательно

Простое требование к полю, основанное на состоянии другого поля:

class FooForm(forms.Form)
    foo = forms.BooleanField()
    bar = forms.CharField(required=False)

    def clean(self):
        if self.cleaned_data.get('foo') and not self.cleaned_data.get('bar'):
            raise forms.ValidationError('With foo you must have bar')

Как я могу сделать обратное и удалить требование поля вместо этого?

E.g.

class FooForm(forms.Form)
    foo = forms.BooleanField()
    bar = forms.CharField(required=True)

    def clean(self):
        if not self.cleaned_data.get('foo'):
            # No foo, no bar required
            del bar.required??

Установите bar не обязательным, и в clean проверьте, если foo равно False и bar не существует:

class FooForm(forms.Form)
    foo = forms.BooleanField()
    bar = forms.CharField(required=False)

    def clean(self):
        super().clean()
        # No foo and no bar, bad
        if not self.cleaned_data.get('foo') and not self.cleaned_data.get('bar'):
            raise forms.ValidationError("Bar is required without Foo")
Вернуться на верх