如何在 Django 注释中从 0 开始计数?
How to start Count from 0 in django annotation?
我有以下代码来计算与每个事件相关的票数。
class EventManager(models.Manager.from_queryset(EventQuerySet)):
def get_queryset(self):
attendees_count = Sum(Case(
When(~Q(ticket__ticket_number=""), then=1),
output_field=models.IntegerField()
))
return super(EventManager, self).get_queryset().annotate(attendees_count=attendees_count)
那个
When(~Q(ticket__ticket_number=""), then=1)
部分排除所有没有票号的票。它适用于不止一张有效门票的活动(如果有 4 张,则显示 4)。但是,当没有相关票证时,它 returns 1。
行为是这样的; 0 个相关工单 - returns 1 个,1 个相关工单 - 1 个,2 个相关工单 - 2 个等
如何从0开始数?所以 0 个相关工单 - returns 0?
已找到解决方案 - 以供将来参考;
必须为非空主键过滤器扩展 Case
,因为当 FK 关系不存在时,
~Q(ticket__ticket_number="")
将 return True
因此解决方案是
When(Q(ticket__id__isnull=False) & ~Q(ticket__ticket_number=""), then=1)
我有以下代码来计算与每个事件相关的票数。
class EventManager(models.Manager.from_queryset(EventQuerySet)):
def get_queryset(self):
attendees_count = Sum(Case(
When(~Q(ticket__ticket_number=""), then=1),
output_field=models.IntegerField()
))
return super(EventManager, self).get_queryset().annotate(attendees_count=attendees_count)
那个
When(~Q(ticket__ticket_number=""), then=1)
部分排除所有没有票号的票。它适用于不止一张有效门票的活动(如果有 4 张,则显示 4)。但是,当没有相关票证时,它 returns 1。 行为是这样的; 0 个相关工单 - returns 1 个,1 个相关工单 - 1 个,2 个相关工单 - 2 个等
如何从0开始数?所以 0 个相关工单 - returns 0?
已找到解决方案 - 以供将来参考;
必须为非空主键过滤器扩展 Case
,因为当 FK 关系不存在时,
~Q(ticket__ticket_number="")
将 return True
因此解决方案是
When(Q(ticket__id__isnull=False) & ~Q(ticket__ticket_number=""), then=1)