预填充Flask窗体整数字段

2024-09-22 16:37:24 发布

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

简单形式:

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

查看功能:

^{pr2}$

提交表单时,不管输入了什么,结果总是55。如果我注释掉55行,并取消注释默认值为44的行,表单工作正常,但我确实需要能够设置预填充值(它将从数据库中检索)。在

似乎我错过了一些很明显的东西,但我四处寻找,想不出来。在

我发现在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)

这是最好的办法吗?在


Tags: 功能formdefault表单return形式classintegerfield
3条回答

而不是

form.dutyCycle.data = 55

使用

^{pr2}$

data属性保存验证后用户放置的数据。您通过分配给data重写用户输入。在

您可以在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)

或者在类中设置默认值

^{pr2}$

如果默认值适用于此窗体的所有实例,我会在类定义中设置默认值。如果需要根据其他查找为字段设置默认值,我将使用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)

相关问题 更多 >