fix(pos): исправить загрузку витринных комплектов
- Добавить display_name в CustomUser (name или email) - Исправить get_showcase_kits_api: заменить username на display_name - Использовать Case/When с output_field для выбора имени на уровне БД Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@ from django.contrib.auth.decorators import login_required
|
||||
from django.http import JsonResponse
|
||||
from django.views.decorators.http import require_http_methods
|
||||
from django.db import transaction
|
||||
from django.db.models import Prefetch, OuterRef, Subquery, DecimalField
|
||||
from django.db.models import Prefetch, OuterRef, Subquery, DecimalField, F, Case, When, CharField
|
||||
from django.db.models.functions import Coalesce
|
||||
from django.utils import timezone
|
||||
from django.core.exceptions import ValidationError
|
||||
@@ -454,10 +454,18 @@ def get_showcase_kits_api(request):
|
||||
product_kit_id__in=kit_ids,
|
||||
cart_lock_expires_at__gt=timezone.now(),
|
||||
status='reserved'
|
||||
).select_related('locked_by_user').values(
|
||||
).select_related('locked_by_user').annotate(
|
||||
# На уровне БД выбираем: если name есть - берем name, иначе email
|
||||
locked_by_user_display=Case(
|
||||
When(locked_by_user__name__isnull=False, then=F('locked_by_user__name')),
|
||||
When(locked_by_user__name='', then=F('locked_by_user__email')),
|
||||
default=F('locked_by_user__email'),
|
||||
output_field=CharField()
|
||||
)
|
||||
).values(
|
||||
'product_kit_id',
|
||||
'locked_by_user_id',
|
||||
'locked_by_user__username',
|
||||
'locked_by_user_display',
|
||||
'cart_lock_expires_at'
|
||||
)
|
||||
|
||||
@@ -476,7 +484,7 @@ def get_showcase_kits_api(request):
|
||||
is_locked_by_me = lock_info['locked_by_user_id'] == request.user.id
|
||||
kit['is_locked'] = True
|
||||
kit['locked_by_me'] = is_locked_by_me
|
||||
kit['locked_by_user'] = lock_info['locked_by_user__username']
|
||||
kit['locked_by_user'] = lock_info['locked_by_user_display']
|
||||
kit['lock_expires_at'] = lock_info['cart_lock_expires_at'].isoformat()
|
||||
else:
|
||||
kit['is_locked'] = False
|
||||
|
||||
Reference in New Issue
Block a user