Как работает SQL запрос Case и When в django ORM?

У меня есть SQL-запрос, и при написании в Django ORM он возвращает ошибку. Но SQL запрос прекрасно работает в MySQL Command Line Client. Не мог бы кто-нибудь объяснить ошибку или работу CASE и When в Django ORM?

SQL запрос:-

SELECT CASE WHEN LENGTH(au.first_name) < 1 THEN au.username ELSE concat(au.first_name,' ',au.last_name)
END AS fullname FROM rewards_usercard ru RIGHT JOIN auth_user au ON ru.user_id = au.id;

Код моделей Django Models:-


from django.db.models import Case, When, Q, CharField, Value
from django.db.models.functions import Length, Concat
from django.db.models.lookups import LessThan

queryset = UserCard.objects.annotate(
            full_name = Case(
                When(condition=Q(
                    LessThan(Length('user__first_name'),1)
                ), then='user__username'),
                default = Concat('user__first_name', Value(' '), 'user__last_name'),
                output_field=CharField()
            )
            )

Ошибка:-

cannot unpack non-iterable LessThan object

Попробуйте это:

from django.db.models.functions import Coalesce, Concat
from django.db.models import (Case, CharField, When, Value)


data = UserCard.objects.all().annotate(fullname=Coalesce(Case(When(user__first_name__in=[None, ""], then="user__username"),default=Concat('user__first_name',Value(" "), 'user__last_name'),output_field=CharField()),"user__username")).values('fullname')
Вернуться на верх