如何在 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)