gpt4 book ai didi

python - 动态添加字段到 WTForms 表单

转载 作者:太空狗 更新时间:2023-10-30 01:05:33 25 4
gpt4 key购买 nike

我想定义一个表单类,其中包含基于 name: label 字典的字段。我尝试了以下,几乎成功了。但是,在模板中呈现字段时出现 AttributeError: 'UnboundField' object has no attribute '__call__'。如何向表单动态添加字段?

def build_form(name, record):
class ContactForm(FlaskForm):
name = StringField(name)
fieldlist = {}

for key, value in record.items():
fieldlist[key] = StringField(key)

@app.route('/', methods=['GET', 'POST'])
def showform():
form = ContactForm(request.form)

if request.method == 'POST':
return 'form processed'

return render_template('cardcompare.tpl', record=record, form=form)
<form method=post>
{{ form.name() }}
{% for key, value in record.items() %}
{{ form.fieldlist[key]() }}
{% endfor %}
<input type=submit value=Register>
</form>

最佳答案

使用setattr 添加新字段作为表单类的属性。这将导致 WTForms 正确设置字段,而不是保留未绑定(bind)的字段。

# form class with static fields
class MyForm(FlaskForm):
name = StringField('static field')

record = {'field1': 'label1', 'field2': 'label2'}

# add dynamic fields
for key, value in record.items():
setattr(MyForm, key, StringField(value))

在模板中,您可以使用 attr 过滤器遍历字段。

{% for key, value in record.items() %}:
{{ form|attr(key)() }}
{% endfor %}

关于python - 动态添加字段到 WTForms 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43859978/

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