如何从动态WTForm继承?

时间:2014-04-27 01:44:36

标签: python flask wtforms

我需要一个包含动态创建的部分和静态部分的表单。所以我正在考虑子类化......但是无法弄清楚它如何与动态创建的表单一起工作。 我正在以这种方式创建我的动态表单:

来自views.py的

def create_legumes_form_class(legumes):
form_fields={}    
for legume in legumes:
    field_id = 's_{}'.format(legume.id)
    form_fields[field_id] = IntegerField(default=0 , validators = [InputRequired()])
return type('OrderForm', (Form,), form_fields)

然后在我的视图函数中实例化表单:

legumes = Legumes.query.filter_by(disponible = True).all()
OrderForm = create_legumes_form_class(legumes)
form = OrderForm()

但是对于这个OrderForm(),我需要添加一些总是相同的BooleanField(即,不是从Query动态创建的)。

所以我试图在 forms.py 中添加一个(静态)表单,并在view函数中像这样实例化它:

form=OrderForm(StaticForm)

但我得到了

    TypeError: formdata should be a multidict-type wrapper that supports the 'getlist' method

我不知道从哪里拿走它! 我做错了什么/不做什么?

1 个答案:

答案 0 :(得分:1)

您不能将另一个类传递给OrderForm构造函数,并让它继承该类。但是,您可以在致电type时提供此服务。

return type('OrderForm', (Form, StaticForm), form_fields)

如果StaticForm子类Form可以进一步简化。

return type('OrderForm', (StaticForm,), form_fields)