Select2 показывает TEXT, но отправляет идентификаторы, используя Flask, WTForms - PullRequest
1 голос
/ 28 января 2020

Я пытаюсь реализовать функцию раскрывающегося списка 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)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...