【发布时间】:2016-03-04 08:00:29
【问题描述】:
我正在尝试使用 WTF 字段、FormField、FieldList 创建 ListItem 表单:
forms.py
class WarehouseTicketItemForm(Form):
description = StringField(u'Description', validators=[Required()])
quantity = IntegerField(u'Quantity', validators=[Required()])
class WarehouseTicketForm(Form):
spot_id = SelectField(u'Spot', coerce=int)
items = FieldList(FormField(WarehouseTicketItemForm), min_entries = 3)
warehouse_ticket_form.html
<form action="" method='POST'>
{{ form.hidden_tag() }}
{{ form.spot_id }} <br>
{% for item in form.items %}
{{ item }}
{% endfor %}
<button type="submit" name="button">Save it</button>
warehouse_tickets.py
@coordinator.route('/warehouses/tickets/update', methods=['GET', 'POST'])
def update_warehouses_tickets():
page = dict(title="Warehouse Ticket")
form = WarehouseTicketForm()
form.spot_id.choices = [(s.id, s.name)
for s in Spot.query.filter_by(status=True)]
if form.validate_on_submit():
print form.data
return render_template('coordinators/warehouses/warehouse_ticket_form.html',
page=page, form=form)
提交表单“print form.data”不会返回任何内容...
我不知道我错过了
【问题讨论】:
-
您的
<form>标签是否正确关闭? -
action属性也可能需要指定实际页面。由于它似乎被重定向到当前页面,action='/'或action='.'就足够了。您不使用快速表单的任何原因? -
两个建议。我终于发现,对于每个新的“项目”形式,都需要一个 crsf 令牌。为此,我必须通过将 crsf 令牌设置为 False 来覆盖 WarehouseTicketItemForm 初始化函数。
-
我一开始还以为是csrf token的问题。但是因为您使用的是
hidden_tag(),所以我假设 csrf 令牌是自动生成的?
标签: flask flask-wtforms