如何在Wtforms中使用SelectField的值动态填充StringField

时间:2019-10-16 22:01:54

标签: javascript flask flask-wtforms

在wtforms中,我希望我的SelectField填充其选择的值StringField。 我使用flask,bootstrap和python 3.7

我的HTML代码如下:

{% block body %}
    <h3>Edit Bloomberg ticker details</h3>
    {% from "includes/forms/_form_helpers.html" import render_field %}


            <div class="form-group" id="company_id" onchange="myFunction(event)">
                {{render_field(form.company_names, class_="form-control")}}
            </div>

            <div class="form-group" id="isin_id">
                {{render_field(form.isin_id, class_="form-control")}}
            </div>

             <script>
                function myFunction(e) {

                    document.getElementById("isin_id").value = e.target.value
                        }
            </script>

{% endblock %}

后面的pyhon如下:


class DefTickerForm(_Form):

    choices_companies = [(1,'Facebook'), (2, 'Google') ]
    company_names = _SelectField(label='Company names:', choices=choices_companies, coerce=int)

    isin_id = _StringField(label='isin_id', validators=[_validators.DataRequired], default=-1)

我希望当用户选择“ Facebook”时,isin SelectField等于1。但是到目前为止,它什么也不做。 请注意,如果代码为:

    alert(e.target.value)

我得到了想要的值。所以问题是设置TextField值。

我的渲染域代码如下(来自youtube教程):


{% macro render_field(field) %}
    {{ field.label }}
    {{ field(**kwargs)|safe }}
    {% if field.errors %}
        {% for error in field.errors %}
        <span class="help-inline"> {{ error }}</span>
        {% endfor %}
    {% endif %}
{% endmacro %}

由于Google在这些方面的帮助不是很大,因此任何帮助都将不胜感激。 最好

1 个答案:

答案 0 :(得分:0)

显然,TextField仅接受字符串(如果您习惯使用JavaScript,我想很明显)

因此,如果有人遇到相同的问题,代码工作如下:

            <div class="form-group" onchange="myFunction(event)">
                {{render_field(form.company_names, class_="form-control")}}
            </div>

            <div class="form-group">
                {{render_field(form.isin_id, class_="form-control")}}
            </div>

             <script>
                function myFunction(e) {
                                var x = e.target.value;
                                alert(x);
                                document.getElementById("isin_id").value = x.toString();
                        }
            </script>

请注意,无论是Jinja还是我的渲染器,都应使用字段名称作为默认ID(这是我使用Chrome inpector意识到的。这意味着我不必为每个Div添加一个ID。无论如何,这就是beginenr的想法)用Java语言编写。

相关问题