【问题标题】:Generate Radio Field for each element in a questionnaire为问卷中的每个元素生成单选字段
【发布时间】:2017-12-23 13:32:40
【问题描述】:

所以我使用 wtforms 来生成单选字段,但我需要它们是动态的,就像如果有 12 个问题,每个问题都会得到一组单选字段。我尝试了 FormField,它给了我想要的东西,但所有问题的名称都是相同的,有没有更好的方法来做到这一点?

输出应该是这样的:

Question
Radiofield1 radioField1

Question
Radiofield2 radioField2

编辑: 我继续完成 HTML 字段,但这真的很有帮助。 我不太记得我做了什么,但这很接近我可以渲染字段但id不会改变我尝试将元组传递给

选项,但它为每个问题呈现动态单选字段,而不是为每个问题呈现一组

Forms.py

class QuestionRadio(FlaskForm):
    rad=RadioField("rad",choices=[(1,'Yes'),(2,'No')],id="opt")

class QuestionForm(FlaskForm):
    options=FieldList(FormField(QuestionRadio),min_entries=1)

Views.py

    #This is the question list  
    question=[(ques.id,ques.question) for ques in Questions.query.all()]
    form=QuestionForm()
    #I don't remember what I did after this

模板.html

{% for key,val in question %}

<h4>key. val</h4>

 {{form.options}}


{% endfor%}

【问题讨论】:

    标签: flask wtforms


    【解决方案1】:

    wforms documentation 建议创建一个虚拟类并在视图中动态添加字段。

    这是文档中的示例:

    def my_view():
        class F(MyBaseForm):
            pass
    
        F.username = StringField('username')
        for name in iterate_some_model_dynamically():
            setattr(F, name, StringField(name.title()))
    
        form = F(request.POST, ...)
        # do view stuff
    

    在您的情况下,代码可能看起来像这样(未经测试):

    def my_view():
        class QuestionForm(Form):
            pass
    
        for q in Questions.query.all():
            field = RadioField(q.question,choices=[(1,'Yes'),(2,'No')],id=q.id)
            setattr(QuestionForm, q.id, field)
    
        form = QuestionForm(request.POST, ...)
        # do view stuff
    

    【讨论】:

    • 能否请您告诉我如何在模板中呈现它,我也尝试过,但不知道如何显示它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多