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()
)