簡體   English   中英

預填充Flask-WTForm IntegerField

[英]Prepopulate Flask-WTForm IntegerField

簡單的形式:

class AdjustPWMForm(Form):
    dutyCycle = IntegerField('dutycycle')
    #dutyCycle = IntegerField('dutycycle', default=44)

查看功能:

 def adjust():
    user = g.user
    form = AdjustPWMForm()
    form.dutyCycle.data = 55
    if form.validate_on_submit():
        dutyCycle = form.dutyCycle.data
        print('result %s', dutyCycle)
        return redirect(url_for('statusPage'))

    return render_template('adjust.html', title='Adjust PWM', user=user, form=form)

提交表單后,無論輸入什么,結果始終為55。 如果我注釋掉55行,並用default = 44取消注釋該行,則該表單可以正常工作,但是我確實需要能夠設置預填充值(將從數據庫中檢索該值)。

似乎我確實遺漏了一些明顯的東西,但是我四處尋找,無法解決。

我發現在change_username有用的部分wtforms這使我:

def adjust():
    user = g.user
    form = AdjustPWMForm(dutyCycle=55)
    if form.validate_on_submit():
        dutyCycle = form.dutyCycle.data
        return redirect(url_for('statusPage'))

    return render_template('adjust.html', title='Adjust PWM', user=user, form=form)

那是實現這一目標的最佳方法嗎?

您可以在GET請求上設置默認值

def adjust():
    user = g.user
    form = AdjustPWMForm()
    if request.method == 'GET':
        form.dutyCycle.data = 55
    if form.validate_on_submit():
        dutyCycle = form.dutyCycle.data
        print('result %s', dutyCycle)
        return redirect(url_for('statusPage'))
    return render_template('adjust.html', title='Adjust PWM', user=user, form=form)

或在類中設置默認值

class AdjustPWMForm(Form):
    dutyCycle = IntegerField('dutycycle', default=55)

如果默認值適用於此表單的所有實例,則可以在類定義中設置默認值。 如果需要基於其他查找為字段設置默認值,則可以使用form = AdjustPWMForm(dutyCycle=55)形式進行設置。

我通常在“ POST”方法之后預先填充表單,而不指定請求方法(GET或POST)。 由於我沒有在POST方法之前進行預填充,因此預填充不會影響POST方法附帶的任何新值; 並且由於我未指定任何“ GET”或“ POST”方法,因此,如果POST方法失敗,它將仍然預先填充。

def foo():
    form = MyForm(request.form)

    if request.method == 'POST' and form.validate:
        my_code

    form.dutyCycle.data = 55

    render_template('my_template', form=form)

代替

form.dutyCycle.data = 55

采用

form.dutyCycle.process_data(55)

data屬性保存驗證后用戶放置的數據。 您通過分配給data來覆蓋用戶輸入。

暫無
暫無

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

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