Как динамически заполнить StringField значением SelectField в Wtforms - PullRequest
0 голосов
/ 17 октября 2019

в wtforms, я бы хотел, чтобы мой SelectField заполнялся выбранным значением StringField. Я использую колбу, загрузчик и 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 голосов
/ 17 октября 2019

очевидно, 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 или, в любом случае, мой рендер, используйте имена полей в качестве идентификаторов по умолчанию (что я понял, используя Chrome Inpector. То есть мне не нужно было добавлять id для каждого Div. В любом случае, это мысли новичка в Javascripts.

...