Скрыты временные комплекты из каталога и поиска
Views: - ProductKitListView: фильтр is_temporary=False - CombinedProductListView: фильтр is_temporary=False для комплектов - API search: фильтр is_temporary=False в поиске и популярных Admin: - Добавлен фильтр по is_temporary - Добавлено отображение статуса временного комплекта в списке - Добавлена ссылка на заказ для временных комплектов - Добавлен раздел "Временный комплект" в fieldsets Теперь временные комплекты не показываются в общем каталоге, но доступны в админке и по прямой ссылке (для заказов). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -83,6 +83,8 @@ def search_products_and_variants(request):
|
||||
'pagination': {'more': False}
|
||||
})
|
||||
elif item_type == 'kit':
|
||||
# Для комплектов: временные комплекты можно получать по ID (для заказов)
|
||||
# но не показываем их в общем поиске
|
||||
kit = ProductKit.objects.get(id=numeric_id, is_active=True)
|
||||
return JsonResponse({
|
||||
'results': [{
|
||||
@@ -91,7 +93,8 @@ def search_products_and_variants(request):
|
||||
'sku': kit.sku,
|
||||
'price': str(kit.price) if kit.price else None,
|
||||
'actual_price': str(kit.actual_price) if kit.actual_price else '0',
|
||||
'type': 'kit'
|
||||
'type': 'kit',
|
||||
'is_temporary': kit.is_temporary
|
||||
}],
|
||||
'pagination': {'more': False}
|
||||
})
|
||||
@@ -142,8 +145,8 @@ def search_products_and_variants(request):
|
||||
})
|
||||
|
||||
if search_type in ['all', 'kit']:
|
||||
# Показываем последние добавленные активные комплекты
|
||||
kits = ProductKit.objects.filter(is_active=True)\
|
||||
# Показываем последние добавленные активные комплекты (только постоянные)
|
||||
kits = ProductKit.objects.filter(is_active=True, is_temporary=False)\
|
||||
.order_by('-created_at')[:page_size]\
|
||||
.values('id', 'name', 'sku', 'price', 'sale_price')
|
||||
|
||||
@@ -270,7 +273,7 @@ def search_products_and_variants(request):
|
||||
|
||||
# Поиск комплектов
|
||||
if search_type in ['all', 'kit']:
|
||||
# Используем аналогичную логику для комплектов
|
||||
# Используем аналогичную логику для комплектов (только постоянные)
|
||||
if 'sqlite' in settings.DATABASES['default']['ENGINE']:
|
||||
from django.db.models.functions import Lower
|
||||
query_lower = query_normalized.lower()
|
||||
@@ -283,7 +286,8 @@ def search_products_and_variants(request):
|
||||
models.Q(name_lower__contains=query_lower) |
|
||||
models.Q(sku_lower__contains=query_lower) |
|
||||
models.Q(description_lower__contains=query_lower),
|
||||
is_active=True
|
||||
is_active=True,
|
||||
is_temporary=False
|
||||
).annotate(
|
||||
relevance=Case(
|
||||
When(name_lower=query_lower, then=3),
|
||||
@@ -297,7 +301,8 @@ def search_products_and_variants(request):
|
||||
models.Q(name__icontains=query_normalized) |
|
||||
models.Q(sku__icontains=query_normalized) |
|
||||
models.Q(description__icontains=query_normalized),
|
||||
is_active=True
|
||||
is_active=True,
|
||||
is_temporary=False
|
||||
).annotate(
|
||||
relevance=Case(
|
||||
When(name__iexact=query_normalized, then=3),
|
||||
|
||||
Reference in New Issue
Block a user