更改 Python WTForms 中的字段名称
Change field names in Python WTForms
所以我得到了这个存在重复字段行的表单,它的定义如下:
class SimpleDataRow(Form):
title = StringField('Title')
label = StringField('Name')
class SimpleDataForm(Form):
fields = FieldList(FormField(SimpleDataRow))
在此之后我初始化表单,并在其中附加一些条目和相应的数据:
fields = DBSession.query(Field).filter_by(app=request.currentapp).all()
form = SimpleDataForm()
for field in fields:
form.fields.append_entry(field)
然后我想将字段呈现给浏览器,但由于 WTForms 中的字段命名,我在这里遇到了一些麻烦。呈现字段时,会为其分配名称和 ID fields-0-title
& fields-0-label
,并且对于每一行数据,0 都会递增 1。
我更希望 WTForm 获取字段对象的 ID,并在为字段分配名称和 ID 时使用它。我的字段对象如下所示:
class Field(Base):
__tablename__ = 'sys_fields'
id = Column(Integer, primary_key=True)
label = Column(String(64))
title = Column(String(64))
那么有什么方法可以更改 WTForms 用于命名 FieldList 中的字段的模式吗?理想情况下,我想要这样的命名模式:{prefix_}{label}_{id}
你可以在实例化表单时给一个前缀class。所以在你的情况下你会做这样的事情:
form = SimpleDataForm(prefix=<your prefix string>)
所以我得到了这个存在重复字段行的表单,它的定义如下:
class SimpleDataRow(Form):
title = StringField('Title')
label = StringField('Name')
class SimpleDataForm(Form):
fields = FieldList(FormField(SimpleDataRow))
在此之后我初始化表单,并在其中附加一些条目和相应的数据:
fields = DBSession.query(Field).filter_by(app=request.currentapp).all()
form = SimpleDataForm()
for field in fields:
form.fields.append_entry(field)
然后我想将字段呈现给浏览器,但由于 WTForms 中的字段命名,我在这里遇到了一些麻烦。呈现字段时,会为其分配名称和 ID fields-0-title
& fields-0-label
,并且对于每一行数据,0 都会递增 1。
我更希望 WTForm 获取字段对象的 ID,并在为字段分配名称和 ID 时使用它。我的字段对象如下所示:
class Field(Base):
__tablename__ = 'sys_fields'
id = Column(Integer, primary_key=True)
label = Column(String(64))
title = Column(String(64))
那么有什么方法可以更改 WTForms 用于命名 FieldList 中的字段的模式吗?理想情况下,我想要这样的命名模式:{prefix_}{label}_{id}
你可以在实例化表单时给一个前缀class。所以在你的情况下你会做这样的事情:
form = SimpleDataForm(prefix=<your prefix string>)