Django: Фильтр запросов установлен на двух уровнях - PullRequest
0 голосов
/ 20 июня 2019

Мой набор запросов

qs = Event.objects.filter(organizer=1, status=EventStatus.LIVE,).exclude(tickets__status=TicketStatus.PAUSED,).values('pk', 'tickets__pk', 'tickets__quantity', 'tickets__price_gross')

В результате я получаю

<EventQuerySet [{'pk': 4, 'tickets__pk': 13, 'tickets__quantity': 20, 'tickets__price_gross': 2000}, 
                {'pk': 6, 'tickets__pk': 17, 'tickets__quantity': 123, 'tickets__price_gross': 2000}, 
                {'pk': 6, 'tickets__pk': 16, 'tickets__quantity': 10, 'tickets__price_gross': 1000}, 
                {'pk': 5, 'tickets__pk': 14, 'tickets__quantity': 10, 'tickets__price_gross': 1000}
                ]>

Теперь у меня есть задача, которую я хочу аннотировать tickets_left для своих значений.Для этого я 1) должен насчитать участников .Я зашел так далеко .annotate(sold_tickets=Count('attendees', filter=Q(attendees__canceled=False))).2) Я должен сделать вычитание tickets__quantity - участников .Результат - билеты оставлены.

Но мне все еще не удается получить такой результат, как

<EventQuerySet [{'pk': 4, 'tickets__pk': 13, 'tickets__quantity': 20, 'tickets__price_gross': 2000, 'tickets_left' 123}, 
                {'pk': 6, 'tickets__pk': 17, 'tickets__quantity': 123, 'tickets__price_gross': 2000 'tickets_left' 322},

Проблема, которую я не могу сейчас исправить, состоит в том, что количество участников подсчитывается "за билет ".У вас есть идеи, как это решить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...