以多种形式重用 wtforms 字段

Reuse wtforms field in multiple forms

我有一堆具有相似字段的表单。为了简化我的代码,我想在表单之外定义字段,然后根据需要将字段添加到表单中,如下所示:

name = wt.StringField("name")
age = wt.StringField("age")

class Form1(FlaskForm):
    name=name

class Form2(FlaskForm):
    age=age

class Form3(FlaskForm):
    name=name
    age=age

这种模式似乎行得通,但我以前从未见过有人这样做过,所以我想确保在极端情况下不会出现这种情况。如果是这样,有更好的方法吗?

在我看来,FormField 就是您要找的东西。

class nameForm(Form):
    name = wt.StringField("name")


class ageForm(Form):
    age = wt.StringField("age")


class Form1(FlaskForm):
    name = FormField(nameForm)


class Form2(FlaskForm):
    age = FormField(ageForm)


class Form3(FlaskForm):
    name = FormField(nameForm)
    age = FormField(ageForm)

这是一些相关的文档 -> https://wtforms.readthedocs.io/en/2.3.x/fields/

在该文档中搜索 Field Enclosures 部分

虽然我问题中的模式有效,但我对使用它感到紧张,因为它似乎不是推荐的做事方式。这是满足我需求的更安全的方法:

def name_field(): return wt.StringField("name")
def age_field(): return wt.StringField("age")

class Form1(FlaskForm):
    name=name_field()

class Form2(FlaskForm):
    age=age_field()

class Form3(FlaskForm):
    name=name_field()
    age=age_field()