Я пытаюсь реализовать функцию раскрывающегося списка Select2 (данные через ajax) при использовании WTForms. Почти все работает, что означает, что данные правильно выбираются и обрабатываются в ожидаемом формате «ID и ТЕКСТ», которого ожидает Select2.
Однако при отправке я получаю сообщение об ошибке «Неправильный выбор», когда validate_on_submit
работает. По-видимому, это связано с тем, что Select2 передает идентификационный номер, а не ТЕКСТ. Это странно, потому что он отображает текст на самой странице при поиске и фактически делает выбор. validate_on_submit
ожидает 0 или 1, а не случайное целое число, поэтому он выбрасывает и выдает ошибку. Как мне обойти это? Как получить фактический отправленный текст?
А также любой текст / выделение в предыдущих полях Select2 исчезает при добавлении или удалении строки (я думаю, при запуске render_template
??). Варианты, указанные в колбе / python, остаются без изменений.
Наиболее похожие вопросы, которые я мог найти, это вопрос1 и вопрос2 , но либо ответа нет, либо я не могу полностью понять и применить его.
Вот часть кода:
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.hardware_id, text: item.name};
});
return {
results: res
};
},
cache: true
},
minimumInputLength: 2
});
HTML
<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>
Flask -WTForm
class DeviceForm(FlaskForm):
item_model = SelectField('MODEL', choices=[('0', 'Select Item')], validators=[DataRequired()])
Далее, кажется, что те же проблемы описаны здесь question3 и question4 но я Я до сих пор не могу понять это. Любая помощь приветствуется!
Я также могу предоставить GIF и / или скриншоты.
ОБНОВЛЕНИЕ :
Я узнал, как «получить» значение TEXT и отобразить его через console.log, но как мне сделать этот выбор для WTForms SelectField? Зачем регистрировать идентификатор при отправке?
var hereitgoes = $(element).parents('.row').find('.item-model')
$(hereitgoes).on("select2:select", function (e) {
var selectedtext = $(e.currentTarget).text();
console.log(selectedtext)
});