解释
在您的data
或formdata
关键字参数中,Form
您只需要一个与包含可迭代的子字段key
匹配的字典。该可迭代需求中的项目又具有与的字段列表FieldList
匹配的带有属性的项目。FieldList
如果您遵循下面的示例,我会得到预先填充好的嵌套表单。
编码
from collections import namedtuple
from wtforms import validators
from wtforms import Form
from wtforms import SelectField
from wtforms import BooleanField
from wtforms import TextField
from wtforms import FieldList
from wtforms import FormField
from webob.multidict import MultiDict
# OP's Code
class FullNameMixIn():
full_name = TextField(
'Full name', [
validators.required(message=u"Full name is required")
])
class GroupRoleForm(Form):
group =BooleanField('Group', default=False)
role = SelectField(
'Role',choices=[
("none", "----------"),
('approver', 'Approver'),
('editor', 'Editor')
])
class AdminEditUserForm(Form, FullNameMixIn):
group_roles = FieldList(FormField(GroupRoleForm))
# create some groups
Group = namedtuple('Group', ['group', 'role'])
g1 = Group('group-1', 'none')
g2 = Group('group-2', 'none')
# drop them in a dictionary
data_in={'group_roles': [g1, g2]}
# Build form
test_form = AdminEditUserForm(data=MultiDict(data_in))
# test print
print test_form.group_roles()
呈现的 HTML(截断)
<ul id="group_roles">
<li>
<label for="group_roles-0">Group Roles-0</label>
<table id="group_roles-0">
<tr>
<th><label for="gr
oup_roles-0-group">Group</label></th>
<td><input checked id="group_roles-0-group" name="group_roles-0-group" type="checkbox" value="y"><
/td>
</tr>
<tr>
<th><label for="group_roles-0-role">Role</label></th>
<td>
<select id="group_roles-0-role" name="group_roles-0-role">
<option
selected value="none">----------</option>
<option value="approver">Approver</option>
<option value="editor">Editor</option>
</select>
</td
>
</tr>
</table>
</li>
<li>
<label for="group_roles-1">Group Roles-1</label>
<table id="group_roles-1">
<tr>
<th><label for="group_roles-1-gro
up">Group</label></th>
<td><input checked id="group_roles-1-group" name="group_roles-1-group" type="checkbox" value="y"></td>
</tr>
<tr>
<t
h>
<label for="group_roles-1-role">Role</label></th>
<td>
<select id="group_roles-1-role" name="group_roles-1-role">
<option selected value
="none">----------</option>
<option value="approver">Approver</option>
<option value="editor">Editor</option>
</select>
</td>
</tr>
</table>
<
/li>
</ul>
...