将BooleanField预先填充为已选中(WTForms)

Tyl*_*erW 11 python flask wtforms

对于我的生活,我无法弄清楚如何使用WTForms预填充BooleanField.我有一个名为"活跃"的字段.它默认为未选中,并且不是必需的.所以我把它设置成......

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

然后我有一个编辑页面,我在其中显示我要编辑的"问题"的表单.

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

{{ form.active(value=q.active) }} Show this question?
Run Code Online (Sandbox Code Playgroud)

如果'active'为True,我希望BooleanField(复选框)具有'checked'属性.如果错,不要.但我甚至无法弄清楚如何使复选框具有检查状态,在渲染表单时,更不用说条件部分了.

唯一的方法,我能够让它显示检查是我在定义表单时添加default = True.但那不是我需要的.

我尝试使用'default','initial','value','selected',同时渲染表单没有运气.我搜索了文档和谷歌.我想我错过了什么!:)

UPDATE

这是我的观点.也许是问题?

@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)
Run Code Online (Sandbox Code Playgroud)

sna*_*hor 7

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


Mat*_*ens 7

经过多次搜索后,snahor的回答得到了帮助(+1).谷歌似乎在这个问题上很弱.我发现我需要

<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>
Run Code Online (Sandbox Code Playgroud)

我用过的

<div class="form-group">
  {{adminForm.is_admin.label}}
  {{adminForm.is_admin(checked=user.is_admin, class_="form-control")}}
</div>
Run Code Online (Sandbox Code Playgroud)


小智 7

一个 BooleanField 定义如下:

checkbox = BooleanField('title',
              default=True,
              render_kw ={'checked':''})
Run Code Online (Sandbox Code Playgroud)