WTF BooleanField установить пользовательское значение - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть следующее:

forms.py:

student_account = BooleanField('student_account')

index. html

{{ form.student_account.label() }} {{ form.student_account(class="form-control") }}

И этот код приводит к следующему html:

<input id="student_account" name="student_account" type="checkbox" value="y">

Как установить значение 1 вместо y? Почему на самом деле внезапно появляется «у» в качестве значения?

1 Ответ

2 голосов
/ 21 февраля 2020

'y' - это значение по умолчанию для атрибута логических входов 'value в wtforms.

В соответствии с строкой документации для базы Ввод виджет

По умолчанию метод _value() вызывается в соответствующем поле для предоставления атрибута value= HTML.

И BooleanField _значение метода is

def _value(self):
    if self.raw_data:
        return text_type(self.raw_data[0])
    else:
        return "y"

Если вы действительно хотите другое значение, вы можете переопределить его, установив его в аргументе render_kw поля:

foo = BooleanField('bar', render_kw={'value': '1'})

или подклассом BooleanField и переопределив его _value метод.

Обычно нет особой выгоды в переопределении этого значения; wtforms автоматически приведут значение к логическому значению при построении form.data.

from wtforms import Form, BooleanField
from werkzeug.datastructures import MultiDict

class MyForm(Form):
    b = BooleanField('MyBool')

f = MyForm(formdata=MultiDict({'b': 'y'})
f.data
{'b': True}

f = MyForm(formdata=MultiDict({})
f.data
{'b': False}
...