首页 > 解决方案 > WTF BooleanField 设置自定义值

问题描述

我有以下内容:

表格.py:

student_account = BooleanField('student_account')

索引.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'?为什么实际上突然间有一个“y”作为值?

标签: pythonflask-wtformswtforms

解决方案


'y' 是valuewtforms 中布尔输入属性的默认值。

根据基本输入小部件的文档字符串

默认情况下,_value()将在关联字段上调用该方法以提供value=HTML 属性。

BooleanField的_value方法

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}

推荐阅读