在过去一周每小时进行一次计数

时间:2018-08-14 12:58:57

标签: python django

我有一个拍摄的照片模型。我正在使用Javascript构建最近7天何时拍摄照片的热图。我每小时显示一次。

我的照片模型有一个时间戳记DateTime字段。我如何将这样的列表显示为过去一周每天每小时的总照片?

javascript需要这样的数组:

const heatmapDataSource = [
  [0, 0, 3],
  [6, 23, 3],
  ....
];
  

heatmapDataSource [0] [0]是星期几(今天(星期二)0),   上周三(6)-今天总是0

     

heatmapDataSource [0] [1]是小时(0 == 24:00和23 == 23:00等)

     

heatmapDataSource [0] [2]是该小时的计数值

希望这很有道理!

到目前为止,我已经将其汇总起来以开始计数:

    Photo.objects.annotate(
    hour=Trunc('timestamp', 'hour', output_field=DateTimeField())
).values('timestamp__hour', 'timestamp__day').annotate(photos=Count('id'))

输出:

<QuerySet [{'timestamp__hour': 10, 'timestamp__day': 10, 'photos': 8}, {'timestamp__hour': 12, 'timestamp__day': 13, 'photos': 1}]>

照片模型:

class Photo(models.Model):
    camera = models.ForeignKey(Camera, null=True, on_delete=models.PROTECT)
    image = models.ImageField()
    timestamp = models.DateTimeField(auto_now=True)

UDPATE

这就是我几乎要坐的沙发。

import datetime as DT
today = DT.date.today()
week_ago = today - DT.timedelta(days=7)
from django.db.models.functions import ExtractWeekDay


Photo.objects.filter(timestamp__gte=week_ago).annotate(weekday=ExtractWeekDay('timestamp')).annotate(hour=Trunc('timestamp', 'hour', output_field=DateTimeField())).values('timestamp__hour', 'weekday').annotate(photos=Count('id'))

1 个答案:

答案 0 :(得分:1)

首先,我们需要对查询本身进行一些修复:public class SomeController : Controller { private readonly IHubContext<MyHub> _myHub; public SomeController (IHubContext<MyHub> myHub) { _myHub = myHub; } public void SomeAction() { //for your example _myHub.Clients.All.SendAsync("Notify", "data"); } } 的范围为1-31,这可能不是我们想要的。我们想要工作日,所以:

jQuery(document).ready(function () { });

接下来,我们将需要进行一些后期处理:

__day

这将生成一个 n×3 列表,然后可以例如通过JSON进行传输。