Django подзапрос в случае, когда

У меня есть такой запрос

qty_used_annotation = Case(
        When(scope='ticket', then=BookedTicket.objects.filter(
                global_discount_code__code=F('code'), booking__status__in=['i', 'c', 'g', 'r', 's']
            ).count()),
        When(scope='booking', then=Booking.objects.filter(
                bookedticket__global_discount_code__code=F('code'),
                status__in=['i', 'c', 'g', 'r', 's']
            ).count()),
        output_field=IntegerField()
    )

И это не работает. Ошибка Не удается преобразовать ключевое слово 'code' в поле.. Кто-нибудь может объяснить, как это исправить или почему это не работает. Спасибо

В подзапросах необходимо использовать OuterRef вместо F для доступа к полю из внешнего запроса:

from django.db.models import OuterRef, Subquery, Count

qty_used_annotation = Case(
        When(scope='ticket', then=Subquery(BookedTicket.objects.filter(
                global_discount_code__code=OuterRef('code'), booking__status__in=['i', 'c', 'g', 'r', 's']
            ).annotate(count=Count('id')).values('count'))),
        When(scope='booking', then=Subquery(Booking.objects.filter(
                bookedticket__global_discount_code__code=OuterRef('code'),
                status__in=['i', 'c', 'g', 'r', 's']
            ).annotate(count=Count('id')).values('count'))),
        output_field=IntegerField()
    )
Вернуться на верх