我试图得到以下结果<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
所需的所有信息:
示例:
pk 4事件
门票1:总价格*(数量-售出门票)
门票2:总价格*(数量-售出门票)
pk 5活动
门票1:总价格*(数量-售出门票)
[…]
5)从每个活动的所有门票中,我们构建总和,得到以下结果:
<EventQuerySet [{4: 10000, 5: 20000, [...]}]>
我没有设法建立一个查询集的方式,让我从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"))
编辑:等等-我遗漏了你的取消筛选
根据我建议的编辑,我认为这应该有效:
Event.objects.annotate(max_remaining_gross_sale=Sum(F('tickets__price_gross')*(F('tickets__quantity')-F('tickets__attendees')), output_field=FloatField())).values()
相关问题 更多 >
编程相关推荐