小编Dav*_*all的帖子

Flask + WTForms + SelectMultipleField和Dynamic Choices

我正在尝试使用WTForms.SelectMultipleField来管理表单上的一些动态选择但是我遇到了一些困难,因为它在提交验证之前被修改为客户端.

基本上我有两个SelectMultipleField选项:

class MyForm(Form):
    assigned = SelectMultipleField('Assigned', choices=[])
    available = SelectMultipleField('Available', choices=[('1','1'),('2','2')])
Run Code Online (Sandbox Code Playgroud)

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

在我的模板中,我有这个:

<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>
Run Code Online (Sandbox Code Playgroud)

基本上所有这些都按预期工作; 双击未分配列表中的项目会将其移动到指定的列表.问题是提交表单进行验证时,因为"已分配"字段上的.choices属性最初为"[]",但仍然是"[]"而不是我们给出的新选项列表.

有谁知道这样做的好方法?我想我可以覆盖表单pre_validate()函数并更新assigned.choices以包含"可用"列表中的所有值,但这感觉不对"并且可以用来从客户端提交随机值 - 提交方面. …

python flask wtforms

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

flask ×1

python ×1

wtforms ×1