同一页面中的多个表单,在提交时保持填充数据

时间:2015-07-06 09:54:53

标签: python flask wtforms flask-wtforms

当我提交一份表格时,我会丢失另一份表格中预先填写的数据。我的意思是,为了重现问题,提交form_1,然后我将松开form_2中的选定数据。因此,提交时会忽略它。

test = {'1':True}
form = F(**test) 

您可以测试此代码以检查问题:

from flask import Flask, render_template
from flask_bootstrap import Bootstrap

from flask_wtf import Form
from wtforms import SelectField, SubmitField, TextField, BooleanField

app = Flask(__name__)
app.config['DEBUG'] = True
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
Bootstrap(app)

if __name__ == '__main__':
    app.run()

class UserCriteria(Form):
    factor_1_criteria = SelectField('A', choices=[('1', 'Bad'), ('2', 'Mediocre'), ('3', 'Quite good'), ('4', 'Awesome')])
    submit = SubmitField('Update')

def interests():
    class F(Form):
        pass

    setattr(F, 'submit_interests', SubmitField('Submit'))

    interests = [{"id": 1, "industry": 'banks'},{"id": 2, "industry": 'soccer'}]

    for name in interests:
        setattr(F, str(name['id']), BooleanField(name['industry']))

    test = {'1':True}
    form = F(**test)

    return form

@app.route('/', methods=['GET', 'POST'])
def index():
    form_1 = UserCriteria()
    form_2 = interests()

    return render_template("users/profile.html", form_1=form_1, form_2=form_2)

我期待的是在提交其他表格后保持预先填充的数据仍然可用。

1 个答案:

答案 0 :(得分:1)

经过一些进一步的调查后,我发现问题是request.form。

如果我在提交其他表单时解压缩之前删除了request.form,那么一切都按预期工作。我不知道是否还有其他更友好的方式,但这对我有用。

if request.form.getlist('submit_criteria'):
      del request.form