【问题标题】:Django: Count by day, with 0 for days with no recordsDjango:按天计数,没有记录的天数为 0
【发布时间】:2016-12-13 16:03:23
【问题描述】:

我想获取超过 14 天的记录数

我目前正在做:

class Invitation(models.Model):
    ...
    start_date = models.DateTimeField(default=timezone.now)

all_invitations = Invitation.objects.all()

days14 = all_invitations.filter(start_date__range=[today - timedelta(days=7), today + timedelta(days=8)]).annotate(day=TruncDay('start_date')).values('day').annotate(count=Count('id')).values('day', 'count').order_by('day')

但是,这并没有告诉我有 0 个邀请的日子。 我如何做到这一点?

【问题讨论】:

    标签: python django django-models django-aggregation


    【解决方案1】:

    但是,这并没有告诉我有 0 个邀请的日子。

    在计算计数之前,您已经在 day 上分组

    ....values('day').annotate(count=Count('id'))
    

    所以这些天只会是表格中出现的那些天,因此它不包括邀请数为 0 的天。

    我不确定这是否可以通过查询完全实现,因为您想要的日期不在表中。但是,您可以执行以下操作:

    • 获取 14 天范围内的所有天数 (s1)
    • 在另一组 (s2) 中获取该 14 天范围内表中存在的天数
    • 取 s1 和 s2 的集合差。

    【讨论】:

    • 那么我应该在这里做什么呢?
    猜你喜欢
    • 2022-07-01
    • 2018-11-15
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2013-10-06
    • 2021-10-22
    相关资源
    最近更新 更多