簡體   English   中英

預填充 BooleanField 為選中狀態(WTForms)

[英]Pre-populating a BooleanField as checked (WTForms)

對於我的生活,我無法弄清楚如何使用 WTForms 預填充 BooleanField。 我有一個名為“活動”的字段。 它默認為未選中,也不是必需的。 所以我把它設置成...

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

然后我有一個 EDIT PAGE,我在其中顯示了我想要編輯的“問題”的表單。

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

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

如果 'active' 為 True,我希望 BooleanField(復選框)具有 'checked' 屬性。 如果為 False,則不會。 但是我什至不知道如何使復選框具有選中狀態,在呈現表單時,更不用說條件部分了。

我能夠讓它顯示檢查的唯一方法是在定義表單時添加 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)

如果你有一個對象,你可以用它來填充你的表單,比如form = QuestionForm(obj=my_obj) 如果您只想設置活動屬性,請使用form = QuestionForm(active=True)

經過多次搜索(+1),snahor 的回答有所幫助。 谷歌在這個問題上似乎很弱。 我發現我需要

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

一個 BooleanField 定義如下:

checkbox = BooleanField('title',
              default=True,
              render_kw ={'checked':''})

要將默認布爾值設為 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")

我遇到了同樣的問題,經過數小時的搜索和閱讀,解決方案非常簡單。

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

if request.method=="POST" and form.validate():
    print(form.yourbooleanfield.data)

除了在模板中指定,您還可以在類定義中指定

class QuestionForm(Form):
    question        = TextField('Question', [validators.Required()])
    slug            = TextField('Slug'    , [validators.Required()])
    activeChecked   = BooleanField('Active', default=True  )
    activeUnChecked = BooleanField('Active', default=False )

這些解決方案都不適合我。 WTForms 中似乎有一個尚未修復錯誤

相反,當路由被調用時,我在初始化表單后設置布爾字段的值。 這對我有用

form = GameCreateForm(request.form)
form.allow_comments.data = True

這對我有用

BooleanField(default="checked")

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM