【问题标题】:Count number of events per day统计每天的事件数
【发布时间】:2018-09-10 08:26:01
【问题描述】:

我正在尝试使用 chartist 来可视化每天的事件数量,到目前为止我已经尝试了以下方法:

models.py

class Event(models.Model):
    name = models.TextField(max_length=500)
    event_date = models.DateTimeField()

charts.py

def mychart():
    events = Event.objects.annotate(start_day=Trunc('event_date', 'day', output_field=DateField())).values('event_day').annotate(myevent=Count('id'))                   

    return json.dumps({
         'labels':[p['start_day'] for p in events],
         'series':[p['myevents'] for p in events]})

但我仍然得到单个对象,而不是按“天”分组! 如下图:

2018-04-02 1
2018-03-31 1
2018-04-02 1
2018-04-02 1
2018-03-31 1
2018-04-02 1
2018-04-02 1

而我所期待的是:

2018-04-02 5

注意:我使用的是 PostgreSQL 数据库

【问题讨论】:

  • 我想说最后一个annotate应该是aggregate
  • 它对我不起作用,我收到以下错误,(字符串索引必须是整数)。
  • 为什么不用Count('event_day') 而不是Count('id')
  • Count('event_day) 返回相同的结果(单个对象)

标签: python django python-3.x


【解决方案1】:

我敢打赌,您的Event 模型上指定了默认排序,即cause your aggregation not to work as expected。进行查询时尝试清除任何默认排序:

Event.objects.annotate(
     start_day=Trunc('event_date', 'day', output_field=DateField())
).values('event_day').annotate(myevent=Count('id')).order_by()

注意最后的order_by()

【讨论】:

  • 你是绝对正确的,谢谢先生,@solarissmoke
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 2020-01-12
  • 2016-12-30
  • 2020-06-04
  • 2019-07-24
  • 1970-01-01
相关资源
最近更新 更多