[英]Flask WTForms FieldList based on input parameter not working
我正在尝试实例化一个包含 FieldList 的 Flask Form,我想根据附加的输入参数更改 FormField。 在这篇文章之后,我的设置如下所示:
class Child1(FlaskForm):
class Meta:
csrf = False
field = SelectField()
class Child2(FlaskForm):
class Meta:
csrf = False
field = StringField()
class Parent(FlaskForm):
field_list_form = FieldList(FormField(Child1))
def __init__(self, select_child="child1", *args, **kwargs):
super().__init__(*args, **kwargs)
if select_child == "child2":
self.field_list_form = FieldList(FormField(Child2))
现在在我的 Flask 应用程序中,当我使用默认参数时,这样做可以正常工作
form = Parent()
for idx in range(42):
form.field_list_form.append_entry({})
但是做的时候
form = Parent(select_child="child2")
for idx in range(42):
form.field_list_form.append_entry({})
我得到AttributeError: 'UnboundField' object has no attribute 'append_entry'
我应该如何以不同的方式做到这一点?
这个问题在这里似乎已经有了答案。
但是,另一种解决方案是使用一个以select_child
作为参数的函数来包装类声明,并根据参数值,使用您的任一 Child 类创建 FormField。
在您的情况下,它将是:
def create_parent(select_child="child1"):
class Parent(FlaskForm):
if select_child == 'child1':
field_list_form = FieldList(FormField(Child1))
elif select_child == "child2":
field_list_form = FieldList(FormField(Child2))
return Parent()
然后form = Parent(select_child="child2")
变成form = create_parent(select_child="child2")
此答案中的更多详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.