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