我需要一个包含动态创建的部分和静态部分的表单。所以我正在考虑子类化......但是无法弄清楚它如何与动态创建的表单一起工作。 我正在以这种方式创建我的动态表单:
来自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
我不知道从哪里拿走它! 我做错了什么/不做什么?
答案 0 :(得分:1)
您不能将另一个类传递给OrderForm
构造函数,并让它继承该类。但是,您可以在致电type
时提供此服务。
return type('OrderForm', (Form, StaticForm), form_fields)
如果StaticForm
子类Form
可以进一步简化。
return type('OrderForm', (StaticForm,), form_fields)