繁体   English   中英

基于输入参数的Flask WTForms FieldList不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM