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 везде, где вам нужно.