WTForms有一个称为的元字段
FormField,另一个名为的元字段
FieldList。将两者结合在一起,您将获得想要的:
class AddressEntryForm(FlaskForm): name = StringField()class AddressesForm(FlaskForm): """A form for one or more addresses""" addresses = FieldList(FormField(AddressEntryForm), min_entries=1)
要在AddressesForm中创建条目,只需使用词典列表:
user_addresses = [{"name": "First Address"}, {"name": "Second Address"}]form = AddressesForm(addresses=user_addresses)return render_template("edit.html", form=form)然后,在您的模板中,只需遍历子表单:
{% from 'your_form_template.jinja' import forms %}{% for address_entry_form in form.addresses %} {{ address_entry_form.hidden_tag() }} {# Flask-WTF needs `hidden_tag()` so CSRF works for each form #} {{ forms.render_field(address_entry_form.name) }}{% endfor %}WTForms会自动正确地为名称和ID加上前缀,因此,当您将数据回发时,您将能够获取
form.addresses.data和获取包含更新数据的词典列表。



