预填充选中的布尔字段(WTForms)

2024-04-16 09:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的生命中,我不知道如何用WTForms预填充布尔字段。我有一个字段叫“active”。它默认为不检查,并且不是必需的。所以我把它设置成。。。

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,我希望布尔字段(复选框)具有“checked”属性。如果是错的,就不要去。但是我甚至不知道如何使复选框在呈现表单时处于选中状态,更不用说条件部分了。

唯一的方法是,在定义表单时添加default=True。但那不是我需要的。

我试过在不走运地呈现表单时使用“default”、“initial”、“value”、“selected”。我搜索了文档和谷歌。我想我错过了什么!:)

更新

这是我的看法。也许是问题所在?

@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)

Tags: form编辑表单datagetvaluerequirededit
3条回答

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>

我把它当作

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

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

要将默认布尔值设置为True,需要将默认值设置为“checked”

Basic fields Basic fields generally represent scalar data types with single values, and refer to a single input from the form.

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

Represents an input type="checkbox". Set the checked-status by using the default-option. Any value for default, e.g. default="checked" puts checked into the html-element and sets the data to True

Source

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

相关问题 更多 >