Форма django должна возвращать данные на основе сравнения строк - PullRequest
0 голосов
/ 02 июля 2018

Вот форма Джанго,

In [61]: from django import forms

In [62]: class myform(forms.Form):
    ...:     f = forms.BooleanField()
    ...:

In [63]: x = myform({'f': '0'})

In [64]: x.is_valid()
Out[64]: True

In [65]: x.cleaned_data
Out[65]: {'f': True}

Я передаю f как '0', cleaned_data возвращает f как True.

Ожидаемое поведение:

форма должна возвращать False для '0' и True для '1', как мне этого добиться?

1 Ответ

0 голосов
/ 02 июля 2018

По умолчанию 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, вы можете рассмотреть возможность создания собственного класса поля формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...