Исправлена инициализация Select2 для поиска клиента

Проблема: Select2 не инициализировалась корректно, так как конфликтовал с общим инициализатором Select2

Решение:
- Удален класс select2 из поля customer в форме (orders/forms.py)
- Select2 для customer теперь инициализируется отдельно с AJAX поиском
- Используется стандартный Django ID для поля (id_customer)
- Правильно обработаны все ссылки на $customerSelect в JavaScript

Теперь поиск работает корректно:
- Поиск по имени, телефону (любой формат) и email
- Быстрое создание клиента без перезагрузки страницы
- Автоматическое заполнение формы при создании

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-10 22:28:15 +03:00
parent 000b791702
commit 6600dfa51f
2 changed files with 9 additions and 6 deletions

View File

@@ -49,10 +49,11 @@ class OrderForm(forms.ModelForm):
else:
field.widget.attrs.update({'class': 'form-control'})
# Select2 для выпадающих списков
# Select2 для поля customer с AJAX поиском (инициализируется отдельно в JS)
# Django автоматически генерирует ID как id_customer
self.fields['customer'].widget.attrs.update({
'class': 'form-select select2',
'data-placeholder': 'Выберите клиента'
'class': 'form-select',
'data-placeholder': 'Начните вводить имя, телефон или email'
})
self.fields['delivery_address'].widget.attrs.update({

View File

@@ -400,7 +400,10 @@
<script>
document.addEventListener('DOMContentLoaded', function() {
// Инициализация Select2 для поля customer с поиском
$('#{{ form.customer.id_for_label }}').select2({
// Django генерирует ID как id_customer для поля customer
const $customerSelect = $('#id_customer');
$customerSelect.select2({
theme: 'bootstrap-5',
width: '100%',
language: 'ru',
@@ -477,7 +480,7 @@ document.addEventListener('DOMContentLoaded', function() {
}
// Обработка выбора в Select2
$('#{{ form.customer.id_for_label }}').on('select2:select', function(e) {
$customerSelect.on('select2:select', function(e) {
const data = e.params.data;
if (data.is_create_option) {
@@ -828,7 +831,6 @@ document.addEventListener('DOMContentLoaded', function() {
modal.hide();
// Выбираем созданного клиента в Select2
const $customerSelect = $('#{{ form.customer.id_for_label }}');
const newOption = new Option(data.name, data.id, true, true);
$customerSelect.append(newOption).trigger('change');