16

对于我的生活,我无法弄清楚如何使用 WTForms 预填充 BooleanField。我有一个名为“活动”的字段。默认是不勾选的,也不是必须的。所以我把它设置成...

class QuestionForm(Form):
    question = TextField('Question', [validators.Required()])
    slug = TextField('Slug', [validators.Required()])
    active = BooleanField('Active')

然后我有一个编辑页面,我在其中显示我要编辑的“问题”的表格。

{{ form.question.label }}
{{ form.question(value=q.question) }}

{{ form.active(value=q.active) }} Show this question?

如果 'active' 为 True,我希望 BooleanField(复选框)具有 'checked' 属性。如果是假的,不要。但我什至无法弄清楚如何使复选框具有选中状态,在呈现表单时,更不用说条件部分了。

我能够让它显示出来的唯一方法是在定义表单时添加 default=True 。但这不是我需要的。

我在渲染表单时尝试使用“默认”、“初始”、“值”、“选定”,但没有成功。我搜索了文档和谷歌。我想我错过了什么!:)

更新

这是我的观点。也许是问题所在?

@mod.route('/q/<slug>/edit', methods = ['GET', 'POST'])
def edit(slug):
    form = QuestionForm(request.form, csrf_enabled=False)
    q = Question.query(Question.slug==slug).get()
    if request.method=='POST':
        if form.validate_on_submit():
            q.question = form.data.get('question')
            q.slug = form.data.get('slug')
            q.active = form.data.get('active')
            q.put()
            return redirect('/questions')
    return render_template('questions/edit.html', form=form, q=q)
4

8 回答 8

10

如果您有一个对象,您可以使用它来填充您的表单,例如form = QuestionForm(obj=my_obj). 如果您只想设置活动属性,请使用form = QuestionForm(active=True).

于 2013-11-03T21:39:09.063 回答
7

snahor's answer helped after much searching (+1). The google seems weak on this question. I found I needed

<div class="form-group">
  {{adminForm.is_admin.label}}
  {{adminForm.is_admin(checked=True, class_="form-control")}}
</div>

<div class="form-group">
  {{adminForm.is_admin.label}}
  {{adminForm.is_admin(checked=False, class_="form-control")}}
</div>

which I have utilised as

<div class="form-group">
  {{adminForm.is_admin.label}}
  {{adminForm.is_admin(checked=user.is_admin, class_="form-control")}}
</div>
于 2015-04-27T22:37:52.480 回答
7

一个 BooleanField 定义如下:

checkbox = BooleanField('title',
              default=True,
              render_kw ={'checked':''})
于 2020-04-04T15:59:11.520 回答
2

要将默认布尔值设为 True,您需要将默认值设置为“已选中”

基本字段 基本字段通常表示具有单个值的标量数据类型,并引用来自表单的单个输入。

class wtforms.fields.BooleanField(default field arguments, false_values=None)

表示输入类型=“复选框”。使用默认选项设置检查状态。任何默认值,例如 default="checked" 将检查放入 html 元素并将数据设置为 True

资源

class QuestionForm(Form):
    question = TextField('Question', [validators.Required()])
    slug = TextField('Slug', [validators.Required()])
    active = BooleanField('Active', default="checked")
于 2018-07-28T21:21:25.290 回答
1

我遇到了同样的问题,经过数小时的搜索和阅读,解决方案非常简单。

form = forms.TestForm(request.form)
form.yourbooleanfield.checked = YourVariable

if request.method=="POST" and form.validate():
    print(form.yourbooleanfield.data)
于 2020-06-30T19:05:11.480 回答
0

除了在模板中指定外,您还可以在类定义中指定

class QuestionForm(Form):
    question        = TextField('Question', [validators.Required()])
    slug            = TextField('Slug'    , [validators.Required()])
    activeChecked   = BooleanField('Active', default=True  )
    activeUnChecked = BooleanField('Active', default=False )
于 2017-07-15T01:04:42.670 回答
0

这些解决方案都不适合我。WTForms 中似乎有一个尚未修复的错误。

相反,当调用路由时,我会在初始化表单后设置布尔字段的值。这对我有用

form = GameCreateForm(request.form)
form.allow_comments.data = True
于 2020-05-21T20:37:03.040 回答
0

这对我有用

BooleanField(default="checked")

https://wtforms.readthedocs.io/en/2.3.x/fields/

class wtforms.fields.BooleanField(default field arguments, false_values=None)
于 2020-09-03T00:22:27.020 回答