【问题标题】:Count number of records by date按日期计算记录数
【发布时间】:2017-09-01 10:11:04
【问题描述】:

鉴于此模型:

Foo(models.Model):
    some_fields
        ...
    date = models.DateTimeField(db_index=True, auto_now_add=True)

我想在图表中显示数据,其中 X 轴是时间 (HH:MM),Y 轴是当时的实例数。

我试过了:

Foo.objects.extra({'date_created' : "date(date)"}).annotate(created_count=Count('id')).values('date_created', 'created_count')

created_count 的值始终为 1,即使我同时创建 2 个实例(bulk_create)。

有在 Django 1.8 中完成此任务的想法吗?

更新: 由于字段 DateTimeField 存储毫秒,因此查询不计算同一天时间的记录,就好像它们是同时创建的,所以我最终将毫秒数归零。

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案1】:

    您需要在注释之前订购它。只有 一个 关于 stackoverflow 的答案提到了这一点,所以你去吧。

    Foo.objects.extra({'date_created' : "date(date)"}).order_by("date_created").annotate(created_count=Count('id'))
    

    【讨论】:

      【解决方案2】:

      您将annotatevalues 放在了错误的顺序中,并计算了错误的列数。你的链接方式

      Foo.objects.extra(
        {'date_created' : "date(date)"}
      ).annotate(created_count=Count('id')).values('date_created', 'created_count')`
      

      注释按表中所有列分组的计数,因此计数为 1。

      解决方案

      Foo.objects.extra(
        {'date_created' : "date(date)"}
      ).values('date_created').annotate(created_count=Count('date'))
      

      这首先选择date作为date_created,然后将count按日期分组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 2017-04-30
        • 1970-01-01
        • 2016-05-18
        • 2015-03-20
        • 1970-01-01
        • 2021-04-06
        相关资源
        最近更新 更多