【问题标题】:How to Loop Through RadioField List如何循环遍历 RadioField 列表
【发布时间】:2019-01-31 03:40:25
【问题描述】:

如何循环遍历 wtform RadioFields 列表?我尝试使用以下代码来实现这一点:

以下是我的 .py 文件中的代码。生成字段的代码在 init 方法中。

from flask import (Flask, render_template, request,
                session, url_for, redirect)
from flask_wtf import FlaskForm
from wtforms import SubmitField, RadioField, StringField

app = Flask(__name__)
app.config['SECRET_KEY'] = 'my_secret'

class AssessmentForm(FlaskForm):
    """Questionnaire Assessment Form"""

    submit = SubmitField('Submit')

    def __init__(self):
        super().__init__()

        #Get Activity Questions
        f = open(r'my_path\questions.txt','r')
        q = f.readlines()
        q = [s.strip() for s in q]
        f.close()
        self.questions = q

        #Create 60 rows of 5 radio buttons
        self.radio_row = []
        for i in range(60):
            #row of 5 radio fields
            rr = RadioField(label=f'row{i+1}',choices=[('s_dis', 'Strongly Dislike'), 
                                    ('dis', 'Dislike'),
                                    ('unsure', 'Unsure'),
                                    ('dis', 'Like'),
                                    ('s_like', 'Disagree')])
            self.radio_row.append(rr)

@app.route('/', methods=['GET','POST'])
def assessment():
    form = AssessmentForm()

    if form.validate_on_submit():
        return redirect(url_for('results'))

    return render_template('questionnaire.html', form=form)

@app.route('/results')
def results():
    return render_template('results.html')

if __name__ == "__main__":
    app.run(debug=True)

当我尝试这样做时,我收到以下错误:

 TypeError: 'UnboundField' object is not iterable

【问题讨论】:

    标签: python-3.x flask jinja2 flask-wtforms


    【解决方案1】:

    WTForms 基于 python 的元编程类,并且默认情况下一切正常工作需要您在特定时间执行特定操作。为了使字段起作用,它们应该被绑定(通常是表单),WTForms 在form init 期间通过特殊的meta-class DefaultMeta 绑定字段。但是 WTForms 需要知道要绑定哪些字段以及这些字段存储在 _unbound_fields list 中。因此,在您的情况下,为避免元编程的复杂性,一个简单的解决方案是将您新创建的字段附加到 _unbound_fields before super().__init__() 调用中,以便 WTForms 将其绑定到你在初始化过程中。

    附:另外,recipes from here might be useful too

    【讨论】:

    • Flan。我实际上确实在代码中构建了表单。我发布了一个包含整个代码的编辑
    • 嗯,您的更改表明您遇到了完全不同的问题。我已经相应地修正了我的答案。
    猜你喜欢
    • 2012-04-01
    • 2013-06-22
    • 1970-01-01
    • 2011-02-28
    • 2018-09-05
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    相关资源
    最近更新 更多