如何在 django 注释中从 0 开始计数?

Posted

技术标签:

【中文标题】如何在 django 注释中从 0 开始计数?【英文标题】:How to start Count from 0 in django annotation? 【发布时间】:2021-06-14 23:33:34 【问题描述】:

我有以下代码来计算与每个活动相关的门票。

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)。但是,当没有关联票证时,它返回 1。 行为是这样的; 0 张相关票 - 退回 1、1 张相关票 - 1、2 张相关票 - 2 等等。

如何从0开始计数?所以 0 个相关票证 - 返回 0 个?

【问题讨论】:

【参考方案1】:

找到解决方案 - 供将来参考;

Case 必须扩展为非空主键过滤器,因为当 FK 关系不存在时, ~Q(ticket__ticket_number="") 将返回 True

所以解决办法是

When(Q(ticket__id__isnull=False) & ~Q(ticket__ticket_number=""), then=1)

【讨论】:

以上是关于如何在 django 注释中从 0 开始计数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 2.0.4 中从我的专辑模型自动生成 slug

如何在 django 频道中从消费者类外部发送普通 JSON 消息

Django:结合来自两个过滤器查询的两个计数注释

Django:如何聚合/注释多对多关系?

如何在 Laravel 中从 json 索引计数

如何在 PHP 中从具有 2 个计数的数组创建 2 个集合?