Server-side search in POS: instant search by name and SKU with debounce 300ms
This commit is contained in:
@@ -266,15 +266,17 @@ def get_showcase_kits_api(request):
|
||||
@require_http_methods(["GET"])
|
||||
def get_items_api(request):
|
||||
"""
|
||||
API endpoint для получения товаров и комплектов с пагинацией.
|
||||
API endpoint для получения товаров и комплектов с пагинацией и поиском.
|
||||
Параметры:
|
||||
- category_id: ID категории (опционально, для фильтрации)
|
||||
- query: поисковый запрос по name или sku (опционально)
|
||||
- page: номер страницы (по умолчанию 1)
|
||||
- page_size: размер страницы (по умолчанию 60)
|
||||
Сортировка по умолчанию: по свободному остатку (available - reserved) DESC
|
||||
"""
|
||||
from products.models import ProductPhoto, ProductKitPhoto
|
||||
from django.core.paginator import Paginator
|
||||
from django.db.models import Q
|
||||
|
||||
# Получаем текущий склад
|
||||
current_warehouse = get_pos_warehouse(request)
|
||||
@@ -284,8 +286,9 @@ def get_items_api(request):
|
||||
'error': 'Нет активного склада'
|
||||
}, status=400)
|
||||
|
||||
# Параметры пагинации
|
||||
# Параметры пагинации и поиска
|
||||
category_id = request.GET.get('category_id')
|
||||
search_query = request.GET.get('query', '').strip()
|
||||
page = int(request.GET.get('page', 1))
|
||||
page_size = int(request.GET.get('page_size', 60))
|
||||
|
||||
@@ -328,6 +331,12 @@ def get_items_api(request):
|
||||
if category_id:
|
||||
products_qs = products_qs.filter(categories__id=category_id)
|
||||
|
||||
# Фильтруем по поисковому запросу (name или sku)
|
||||
if search_query:
|
||||
products_qs = products_qs.filter(
|
||||
Q(name__icontains=search_query) | Q(sku__icontains=search_query)
|
||||
)
|
||||
|
||||
# Сериализуем товары
|
||||
products = []
|
||||
for p in products_qs:
|
||||
@@ -373,6 +382,12 @@ def get_items_api(request):
|
||||
if category_id:
|
||||
kits_qs = kits_qs.filter(categories__id=category_id)
|
||||
|
||||
# Фильтруем комплекты по поисковому запросу (name или sku)
|
||||
if search_query:
|
||||
kits_qs = kits_qs.filter(
|
||||
Q(name__icontains=search_query) | Q(sku__icontains=search_query)
|
||||
)
|
||||
|
||||
# Сериализуем комплекты
|
||||
kits = []
|
||||
for k in kits_qs:
|
||||
|
||||
Reference in New Issue
Block a user