gpt4 book ai didi

python - 如何在表单的 __init__ 函数中绑定(bind)字段

转载 作者:行者123 更新时间:2023-11-30 22:39:08 25 4
gpt4 key购买 nike

class Example_Form(Form):
field_1 = TextAreaField()
field_2 = TextAreaField()

def __init__(self, type, **kwargs):
super(Example_Form, self).__init__(**kwargs)

if type == 'type_1':
self.field_3 = TextAreaField()

在某些情况下,我需要动态地将字段添加到表单中。添加到示例表单的 field_3 结果是一个 UnboundField。我尝试在 __init__ 函数中将 field_3 绑定(bind)到 form,但它不起作用。

field_3 = TextAreaField()
field_3.bind(self, 'field_3')

如何将field_3绑定(bind)到示例表单?

最佳答案

使用self.meta.bind_field创建绑定(bind)字段,并将其分配给实例和_fields字典。

self.field_3 = self._fields['field_3'] = self.meta.bind_field(
self, TextAreaField(),
{'name': 'field_3', 'prefix': self._prefix}
)
<小时/>

在大多数情况下,使用子类并在创建表单实例时决定使用哪个类会更清楚。

class F1(Form):
x = StringField()

class F2(F1):
y = StringField()

form = F1() if type == 1 else F2()

如果您需要更加动态,您可以对表单进行子类化并为其分配字段。与实例不同,可以直接将字段分配给类。

class F3(F1):
pass

if type == 3:
F3.z = StringField()

form = F3()

您还可以定义所有字段,然后选择在验证表单之前删除一些字段。

class F(Form):
x = StringField()
y = StringField()

form = F()

if type == 1:
del form.y

关于python - 如何在表单的 __init__ 函数中绑定(bind)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43267820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com