Исправлена инициализация 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:
@@ -49,10 +49,11 @@ class OrderForm(forms.ModelForm):
|
|||||||
else:
|
else:
|
||||||
field.widget.attrs.update({'class': 'form-control'})
|
field.widget.attrs.update({'class': 'form-control'})
|
||||||
|
|
||||||
# Select2 для выпадающих списков
|
# Select2 для поля customer с AJAX поиском (инициализируется отдельно в JS)
|
||||||
|
# Django автоматически генерирует ID как id_customer
|
||||||
self.fields['customer'].widget.attrs.update({
|
self.fields['customer'].widget.attrs.update({
|
||||||
'class': 'form-select select2',
|
'class': 'form-select',
|
||||||
'data-placeholder': 'Выберите клиента'
|
'data-placeholder': 'Начните вводить имя, телефон или email'
|
||||||
})
|
})
|
||||||
|
|
||||||
self.fields['delivery_address'].widget.attrs.update({
|
self.fields['delivery_address'].widget.attrs.update({
|
||||||
|
|||||||
@@ -400,7 +400,10 @@
|
|||||||
<script>
|
<script>
|
||||||
document.addEventListener('DOMContentLoaded', function() {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
// Инициализация Select2 для поля customer с поиском
|
// Инициализация Select2 для поля customer с поиском
|
||||||
$('#{{ form.customer.id_for_label }}').select2({
|
// Django генерирует ID как id_customer для поля customer
|
||||||
|
const $customerSelect = $('#id_customer');
|
||||||
|
|
||||||
|
$customerSelect.select2({
|
||||||
theme: 'bootstrap-5',
|
theme: 'bootstrap-5',
|
||||||
width: '100%',
|
width: '100%',
|
||||||
language: 'ru',
|
language: 'ru',
|
||||||
@@ -477,7 +480,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Обработка выбора в Select2
|
// Обработка выбора в Select2
|
||||||
$('#{{ form.customer.id_for_label }}').on('select2:select', function(e) {
|
$customerSelect.on('select2:select', function(e) {
|
||||||
const data = e.params.data;
|
const data = e.params.data;
|
||||||
|
|
||||||
if (data.is_create_option) {
|
if (data.is_create_option) {
|
||||||
@@ -828,7 +831,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
modal.hide();
|
modal.hide();
|
||||||
|
|
||||||
// Выбираем созданного клиента в Select2
|
// Выбираем созданного клиента в Select2
|
||||||
const $customerSelect = $('#{{ form.customer.id_for_label }}');
|
|
||||||
const newOption = new Option(data.name, data.id, true, true);
|
const newOption = new Option(data.name, data.id, true, true);
|
||||||
$customerSelect.append(newOption).trigger('change');
|
$customerSelect.append(newOption).trigger('change');
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user