Я пытаюсь получить следующий результат <EventQuerySet [{4: 10000, 5: 20000, [...]}]>
.
Способ "получить" есть следующий рабочий процесс:
1) Получить каждое активное событие организатора
def organizers(self):
return self.request.user.organizers
Event.objects.filter(
organizer__in=self.organizers,
status=EventStatus.LIVE
)
2) Для каждого события> получить все билеты, которые принадлежат этому конкретному событию.Особенно мне нужно получить доступ к количеству и цене каждого билета
3) Получить количество уже проданных билетов
.annotate(
sold_tickets=Count('attendees', filter=Q(attendees__canceled=False))
)
.order_by('organizer')
4) Теперь у нас есть вся необходимая информациядля расчета max_remaining_gross_sale
на событие:
Пример:
Событие с пк 4
Билет 1: цена_гросс *(количество - продано_клеток)
Билет 2: цена_брос * (количество - продано_клеток)
Событие с пк 5
Билет 1: цена_гросс * (количество- sold_tickets)
[...]
5) Из всех билетов на событие мы собираем сумму и получаем следующий результат: <EventQuerySet [{4: 10000, 5: 20000, [...]}]>
Я не сделалудается построить этот QuerySet таким образом, который дает мне результат из 5).У вас есть какой-нибудь совет для меня?
Здесь мои модели с соответствующими полями:
class Ticket(TimeStampedModel):
quantity = models.PositiveIntegerField(
verbose_name=_("Quantity"),
validators=[MinValueValidator(1), MaxValueValidator(100_000)],
)
status = models.CharField(
max_length=8,
choices=TicketStatus.CHOICES,
default=TicketStatus.ON_SALE,
verbose_name=_("Status"),
)
price_gross = models.PositiveIntegerField(
verbose_name=_("Price gross"), help_text=_("Includes tax if you set any.")
)
class Event(TimeStampedModel):
status = models.CharField(
max_length=8,
choices=EventStatus.CHOICES,
default=EventStatus.LIVE,
verbose_name=_("Status"),
)
organizer = models.ForeignKey(
Organizer, on_delete=models.PROTECT, related_name='events'
)
class Attendee(TimeStampedModel):
ticket = models.ForeignKey(
Ticket, on_delete=models.PROTECT, related_name='attendees'
) # PROTECT = don't allow to delete the ticket if an attendee exists
event = models.ForeignKey(
Event, on_delete=models.PROTECT, related_name='attendees'
)
canceled = models.BooleanField(default=False, verbose_name=_("Canceled"))