预填充Flask-WTForm IntegerField

时间:2014-10-13 15:12:45

标签: python flask wtforms flask-wtforms

简单形式:

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行,并取消注释默认值= 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)

这是实现这一目标的最佳方法吗?

3 个答案:

答案 0 :(得分:3)

您可以在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)方式设置它。

答案 1 :(得分:1)

我经常在" 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)

答案 2 :(得分:0)

而不是

form.dutyCycle.data = 55

使用

form.dutyCycle.process_data(55)

data属性在验证后保存用户放置的数据。您通过分配到data来覆盖用户输入。

相关问题