WTForms创建可变数量的字段

atp*_*atp 13 python wtforms

我如何用不同的问题动态创建一些表单字段,但答案相同?

from wtforms import Form, RadioField
from wtforms.validators import Required

class VariableForm(Form):

    def __init__(formdata=None, obj=None, prefix='', **kwargs):
        super(VariableForm, self).__init__(formdata, obj, prefix, **kwargs)
        questions = kwargs['questions']
        // How to to dynamically create three questions formatted as below?

    question = RadioField(
            # question ?,
            [Required()],
            choices = [('yes', 'Yes'), ('no', 'No')],
            )

questions = ("Do you like peas?", "Do you like tea?", "Are you nice?")  
form = VariableForm(questions = questions)
Run Code Online (Sandbox Code Playgroud)

atp*_*atp 16

它一直在文档中.

def my_view():
    class F(MyBaseForm):
        pass

    F.username = TextField('username')
    for name in iterate_some_model_dynamically():
        setattr(F, name, TextField(name.title()))

    form = F(request.POST, ...)
    # do view stuff
Run Code Online (Sandbox Code Playgroud)

我没有意识到的是必须任何实例化之前设置类属性.清晰度来自这个bitbucket评论:

这不是一个错误,它是设计的.向实例化表单添加字段存在很多问题 - 例如,数据通过Form构造函数进入.

如果重新读取链接的线程,您将注意到需要派生类,向其中添加字段,然后实例化新类.通常,您将在视图处理程序中执行此操作.