По умолчанию forms.BooleanField
использует виджет CheckboxInput
. Не отмеченные флажки не отправляют никаких данных при отправке формы, поэтому виджет CheckboxInput
считает любой непустой ввод True
.
Вы можете обойти это, используя RadioSelectInput
виджет:
>>> class myform(forms.Form):
... f = forms.BooleanField(widget=forms.RadioSelect, required=False)
...
>>> x = myform({'f': '0'})
>>> x.is_valid()
True
>>> x.cleaned_data
{'f': False}
>>> x = myform({'f': '1'})
>>> x.is_valid()
True
>>> x.cleaned_data
{'f': True}
Обратите внимание, что вы должны установить required=False
, иначе форма не будет проверена на ложные значения.
Если вы используете форму только для проверки данных, а не для визуализации HTML, вы можете рассмотреть возможность создания собственного класса поля формы.