Django - невозможно использовать разные значения и метки в списке поля выбора при использовании jQuery Editable Select

В Django я использую ChoiceField:

forms.py

class forms_sales_documents(forms.ModelForm):

    sales_documents_description_1 = forms.ChoiceField(required=False, choices=list(models_products.objects.values_list( 'id_product','product_denomination')), widget=forms.Select(attrs={'id': 'sales_documents_editable_select_description_1','style': 'width:200px','onchange': 'populate_selected_product(this.id,this.value)'}))

Я использую JQuery-Editable-select https://github.com/indrimuska/jquery-editable-select для создания селектбоксов с возможностью поиска, но когда я это делаю, становится невозможным отделить значение ChoiceField от метки.

Они должны быть одинаковыми, как

models_products.objects.values_list( 'id_product','id_product'))

вы не можете сделать что-то вроде

models_products.objects.values_list( 'id_product','product_denomination'))

иначе форма не сохранится и выдаст ошибку :

Select a valid choice. That choice is not one of the available choices

Кто-нибудь поможет мне в этом?

Я нашел обходной путь, чтобы получить значение selectbox вместо текста selectbox, если использовать что-то вроде :

models_products.objects.values_list( 'id_product','product_denomination'))

смотрите мой ответ в этом сообщении Получить текущее выбранное значение в редактируемом поле выбора

Наконец-то я нашел обходной путь.

Когда вы применяете .editableSelect к селектбоксу, он заменяет исходный селектбокс на такой в html :

<input type="text" autocomplete="off" name="your_defined_name" id="your_defined_id" style="width:200px" onchange="" class="es-input">

<ul class="es-list" style="top: 405px; left: 237.6875px; width: 200px; display: none;">
  <li value="1" class="" style="display: none;">my_option_1</li>
  <li value="2" class="" style="display: none;">my_option_2</li>
  <li value="3" class="" style="display: none;">my_option_3</li>
  <li value="4" selected="selected" class="es-visible selected">my_option_4</li>
  <li value="5" class="" style="display: none;">my_option_5</li>
  <li value="6" class="" style="display: none;">my_option_6</li>
  <li value="7" class="" style="display: none;">my_option_7</li>
  <li value="8" class="" style="display: none;">my_option_8</li>
</ul>

Как видно из моего примера, выбранным вариантом является число 4.

Выбранный вариант всегда имеет вызов класса class="es-visible selected"

Поэтому в качестве обходного пути я нашел следующее: найти <li>, содержащий class="es-visible selected", и получить соответствующие value:

editable_select_value = $('#my_editableSelect').val($('#my_editableSelect').parent().find($('[class*="es-visible"]')).val());

Тогда вы сможете повторно использовать val везде, где вам нужно.

Вернуться на верх