我有一张照片的模型。我正在用Javascript构建一个过去7天的照片的热图。我每小时展示一次。
我的照片模型有一个时间戳日期时间字段。我如何制作这样一个列表,显示过去一周每天每小时的照片总数?
javascript需要这样的数组:
const heatmapDataSource = [
[0, 0, 3],
[6, 23, 3],
....
];
heatmapDataSource[0][0]是一周中的某一天(今天(星期二)0,
上周星期三(6)-今天总是0
heatmapDataSource[0][1]是小时(0==24:00和23==23:00等)
希望这有意义!
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)
这就是我的沙发,就快到了。。
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'))