我正在尝试使用 WTForms.SelectMultipleField 来管理表单上的一些动态选择,但在提交验证之前我遇到了一些困难,因为它在客户端被修改。
基本上我有两个 SelectMultipleField 选项:
class MyForm(Form):
assigned = SelectMultipleField('Assigned', choices=[])
available = SelectMultipleField('Available', choices=[('1','1'),('2','2')])
我正在使用 Flask 来渲染 Jinja2 模板,如下所示:
@app.view("/myview", methods=['GET','POST'])
def myview():
form = MyForm(request.form)
if request.method == 'POST' and form.validate():
return render_template("success.html")
else:
return render_template("index.html", form=form)
在我的模板中,我有这个:
<script type="text/javascript">
function assign_object() {
return !$('#available option:selected').remove().appendTo('#assigned');
};
function unassign_object() {
return !$('#assigned option:selected').remove().appendTo('#available');
}
$(document).ready( function() {
$('#available').dblclick( assign_object );
$('#assigned').dblclick( unassign_object );
});
</script>
<form action="/myview" method="post" name="assign_objects">
{{ render_field(form.a) }}
{{ render_field(form.b) }}
<input type="submit" value="Assign" name="assign_button"/>
</form>
基本上所有这些都按预期工作;双击未分配列表中的项目将其移至已分配列表。问题是提交表单进行验证时,因为“已分配”字段上的 .choices 属性最初是“[]”,但仍应为“[]”,而不是我们给它的新选项列表.
有谁知道这样做的好方法?我在想我可以覆盖表单 pre_validate() 函数并更新assigned.choices以包含“可用”列表中的所有值,但这感觉不“正确”,可以用来从客户端提交随机值-一边提交。
干杯,大卫。