From 1b749ebe635dd8b8f5e6ff226ed88fe63edfcdeb Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Mon, 19 Jan 2026 00:15:11 +0300 Subject: [PATCH] =?UTF-8?q?fix(pos):=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=8C=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D1=83=20=D0=B2=D0=B8=D1=82=D1=80=D0=B8=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BB=D0=B5=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавить display_name в CustomUser (name или email) - Исправить get_showcase_kits_api: заменить username на display_name - Использовать Case/When с output_field для выбора имени на уровне БД Co-Authored-By: Claude Opus 4.5 --- myproject/accounts/models.py | 5 +++++ myproject/pos/views.py | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/myproject/accounts/models.py b/myproject/accounts/models.py index d835b75..97a10a9 100644 --- a/myproject/accounts/models.py +++ b/myproject/accounts/models.py @@ -75,6 +75,11 @@ class CustomUser(AbstractBaseUser): def __str__(self): return self.email + @property + def display_name(self): + """Отображаемое имя пользователя: имя если есть, иначе email""" + return self.name or self.email + def has_perm(self, perm, obj=None): """ Проверка разрешения через authentication backends. diff --git a/myproject/pos/views.py b/myproject/pos/views.py index 4cb0857..31a2bba 100644 --- a/myproject/pos/views.py +++ b/myproject/pos/views.py @@ -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