python - 在烧瓶中的烧瓶wtf表单字段上使用通配符
问题描述
我一直在使用 flask-wtf 构建一个问卷。我的问题有 30 个问题,将来可能会增加。
通过阅读 flask-wtf 文档。我看到从表单输入的数据可以像“ form.username.dat a”一样访问。
username = StringField('Username')
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm(request.form)
if request.method == 'POST' and form.validate():
user = User(form.username.data)
db_session.add(user)
return redirect(url_for('login'))
return render_template('register.html', form=form)
我的问题:
我的 qusetionair 表单有很多字段,必须输入 form.FIELDNAME.data 来获取每个字段的输入数据是不合逻辑的。我了解用户注册表单是可以接受的,因为只有大约 3-5 个字段。但是在我的场景(问卷形式)中,这并不理想
我试过的解决方案:
我将我的字段命名为 question_1 question_2 qusetion_3 ,然后创建了如下所示的一段时间以动态输入字段名称。但是,flask-wtf 抱怨“AttributeError: 'MyForm' object has no attribute 'question'”
if form.validate_on_submit():
string = 'q'
for i in range(30):
question = "q"+str(i)
field_name = form.question.data
answer_to_add = Answer(answers=field_name)
db.session.add(answer_to_add)
db.session.commit()
解决方案
对于将来遇到类似问题的人。解决方案是简单地使用“form.data”而不指定字段,因为这意味着所有字段都已发送。
代码示例:
if form.validate_on_submit():
answer = form.data
"do something"
您可以在文档中找到更多有用的信息:https ://wtforms.readthedocs.io/en/2.3.x/forms/?highlight=form#wtforms.form.Form.data
推荐阅读
- bash - 使用 bash 循环遍历临时序列文件名并执行 FastQC 分析
- java - Android Studio java 邮件附件
- python - python中math.pow、numpy.power、numpy.float_power、pow和**的准确性
- html - CSS 使订单项文本换行
- java - 为什么在landroid/view/keyevent之前有“l”
- powershell - 更新 release def 导致错误 VS402903: The specified value is not convertible to type ReleaseDefinition
- java - 转换 XML 时禁用 JAXP 中的缩进
- rpg - Do know you an IDE online for language RPG
- xml - 我可以给 ConstraintLayout 一个“隐藏”变量吗?
- sql - 聚合函数和 unpivot