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