Я использую Select2 с WTForms (SelectField) и Jinja2, заполняя выбор через ajax. Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я добавляю или удаляю новые строки / строки, текст предыдущих полей исчезает. Я думаю, это происходит при запуске render_template
. Как я могу это исправить? Любые предложения приветствуются.
Если варианты указаны в файле python (SelectField), они не исчезнут, но они мне нужны динамически c, так что это не работает для меня. Также при использовании jquery -autocomplete с ajax предыдущие поля не исчезнут и останутся без изменений.
Как мне сделать эту работу с Select2?
Вот два снимка экрана:
При нажатии Add Line
или Delete Line
все поля Select2 (МОДЕЛЬ на изображениях) очищаются до состояния по умолчанию. В моем случае показывать «Нет выбора»
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')]+[])