Python 如何在窗体的_init__函数中绑定字段

Python 如何在窗体的_init__函数中绑定字段,python,flask,wtforms,flask-wtforms,Python,Flask,Wtforms,Flask Wtforms,在某些情况下,我需要在表单中动态添加字段。添加到示例表单中的字段_3原来是一个未绑定的字段。我试图在\uuuu init\uuuu函数中将字段3绑定到表单中,但它不起作用 class Example_Form(Form): field_1 = TextAreaField() field_2 = TextAreaField() def __init__(self, type, **kwargs): super(Example_Form, self).__i

在某些情况下,我需要在表单中动态添加字段。添加到示例表单中的字段_3原来是一个未绑定的字段。我试图在
\uuuu init\uuuu
函数中将字段3绑定到表单中,但它不起作用

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()

如何将字段\u 3绑定到示例表单?

使用
self.meta.bind\u field
创建绑定字段,并将其分配给实例和
\u字段

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

在大多数情况下,在创建表单实例时,使用子类并决定使用哪个类更为明确

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()

使用
self.meta.bind_字段
创建绑定字段,并将其分配给实例和
_字段
dict

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

在大多数情况下,在创建表单实例时,使用子类并决定使用哪个类更为明确

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()

对于此特定情况,您是否希望使用
Example\u Form
的子类?字段是类声明,而不是实例属性,对于描述符协议和
WTForms
可能使用的其他元编程技术来说,差异很重要。对于这种特定情况,您是否需要
Example\u Form
的子类?字段是类声明,而不是实例属性,这一区别对于描述符协议和其他元编程技术很重要
WTForms
可能使用。