Текст предыдущих полей исчезает при добавлении новых строк или отправке формы. Select2 с ajax, WTForms SelectField и шаблон jinja2 - PullRequest
0 голосов
/ 04 февраля 2020

Я использую Select2 с WTForms (SelectField) и Jinja2, заполняя выбор через ajax. Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я добавляю или удаляю новые строки / строки, текст предыдущих полей исчезает. Я думаю, это происходит при запуске render_template. Как я могу это исправить? Любые предложения приветствуются.

Если варианты указаны в файле python (SelectField), они не исчезнут, но они мне нужны динамически c, так что это не работает для меня. Также при использовании jquery -autocomplete с ajax предыдущие поля не исчезнут и останутся без изменений.

Как мне сделать эту работу с Select2?

Вот два снимка экрана:

При нажатии Add Line или Delete Line все поля Select2 (МОДЕЛЬ на изображениях) очищаются до состояния по умолчанию. В моем случае показывать «Нет выбора»

Before add line

after addline is clicked

Javascript

$(element).parents('.row').find('.item-model').select2({
placeholder: 'Select an option',
ajax: {
    url: '/api/1/modelsnew',
    dataType: 'json',
    method: 'GET',
    data: function (params) {
        var specificquery = {
        name: params.term
        }
        return specificquery;
    },
    processResults: function (data) {
            var res = data.models.map(function (item) {
                return {id: item.name, text: item.name};
            });
        return {
            results: res
        };
    },
},
minimumInputLength: 2
});

HTML

<div class="form-group input-form-group">
{% for line in form.devices %}
{{ line.hidden_tag() }}
    <div class="row">

        //other fields

        <div class="col-3">
        {{ line.item_model.label}}
        {% if line.item_model.data == 'Software' %}
        {{ line.item_model(class='form-control item-model', disabled=true) }}
        {% else %}
        {{ line.item_model(class='form-control item-model') }}
        {% endif %}
        {% for error in line.item_model.errors %}
        <p class="form-control-status text-danger">
            {{ error }}
        </p>
        {% endfor %}
        </div>

        //other fields

        <div class="col">
        <label> </label>
        {{ line.delete_line(class='btn btn-danger pull-xs-left') }}
        </div>
    </div>
{% endfor %}

Flask WTForms

class DeviceForm(FlaskForm):
item_model = SelectField('MODEL', validators=[Optional()], choices=[('noselect', 'No selection')]+[])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...