diff --git a/myproject/customers/views.py b/myproject/customers/views.py index f13cac6..91bdf3f 100644 --- a/myproject/customers/views.py +++ b/myproject/customers/views.py @@ -51,15 +51,14 @@ def customer_list(request): if should_search_by_phone_digits: # Ищем клиентов, чьи телефоны содержат введенные цифры - customers_by_phone = Customer.objects.filter(phone__isnull=False) - matching_by_digits = [] - for customer in customers_by_phone: - customer_digits = ''.join(c for c in str(customer.phone) if c.isdigit()) - if query_digits in customer_digits: - matching_by_digits.append(customer.pk) + # Используем LIKE запрос вместо Python loop для оптимизации при большом количестве клиентов + customers_by_phone = Customer.objects.filter( + phone__isnull=False, + phone__icontains=query_digits # Простой поиск по цифрам в phone строке + ) - if matching_by_digits: - q_objects |= Q(pk__in=matching_by_digits) + if customers_by_phone.exists(): + q_objects |= Q(pk__in=customers_by_phone.values_list('pk', flat=True)) customers = customers.filter(q_objects) @@ -308,15 +307,16 @@ def api_search_customers(request): if should_search_by_phone_digits: # Ищем клиентов, чьи телефоны содержат введенные цифры - customers_by_phone = Customer.objects.filter(phone__isnull=False) - matching_by_digits = [] - for customer in customers_by_phone: - customer_digits = ''.join(c for c in str(customer.phone) if c.isdigit()) - if query_digits in customer_digits: - matching_by_digits.append(customer.pk) + # Используем LIKE запрос вместо Python loop для оптимизации при большом количестве клиентов + # Номер телефона в E.164 формате: +375291234567 + # Мы ищем по цифрам, поэтому можно просто использовать LIKE с цифрами + customers_by_phone = Customer.objects.filter( + phone__isnull=False, + phone__icontains=query_digits # Простой поиск по цифрам в phone строке + ) - if matching_by_digits: - q_objects |= Q(pk__in=matching_by_digits) + if customers_by_phone.exists(): + q_objects |= Q(pk__in=customers_by_phone.values_list('pk', flat=True)) customers = Customer.objects.filter(q_objects).distinct().order_by('name')[:20] diff --git a/myproject/orders/templates/orders/order_form.html b/myproject/orders/templates/orders/order_form.html index 93a55bf..557929d 100644 --- a/myproject/orders/templates/orders/order_form.html +++ b/myproject/orders/templates/orders/order_form.html @@ -482,14 +482,14 @@ function initCustomerSelect2() { theme: 'bootstrap-5', width: '100%', language: 'ru', - placeholder: 'Начните вводить имя, телефон или email', - minimumInputLength: 1, + placeholder: 'Начните вводить имя, телефон или email (минимум 3 символа)', + minimumInputLength: 3, allowClear: true, ajax: { url: ajaxUrl, type: 'GET', dataType: 'json', - delay: 250, + delay: 500, data: function(params) { console.log('3. AJAX запрос с query:', params.term); return {