You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django序列化器中计算每日平均值并按日返回单条记录

实现每日心率记录平均值计算

1. 修改查询逻辑(视图层)

利用Django数据库聚合功能,按日期分组计算每日平均值:

from django.db.models.functions import TruncDate
from django.db.models import Avg

# 按日期分组,计算每日平均心率
records = Record.objects.filter(user=user, type="HeartRate") \
    .annotate(date=TruncDate('date_time')) \
    .values('date', 'type') \
    .annotate(average_record=Avg('record')) \
    .order_by('date')
  • TruncDate('date_time'):把date_time字段截断为纯日期格式(仅保留年/月/日),作为分组依据
  • values('date', 'type'):指定按日期和记录类型分组,确保同一用户同类型的记录按日期聚合
  • annotate(average_record=Avg('record')):计算每组(单日)的心率平均值
  • order_by('date'):按日期对结果排序

2. 调整序列化器

因为返回的是聚合统计结果(而非原Record模型实例),需要定义对应序列化器:

class DailyAverageRecordSerializer(serializers.Serializer):
    type = serializers.CharField(max_length=9)
    date = serializers.DateField()
    average_record = serializers.DecimalField(decimal_places=4, max_digits=8)

3. 视图中使用新序列化器

替换原序列化器,处理聚合后的数据集:

serializer = DailyAverageRecordSerializer(records, many=True)

最终返回结果会按日期分组,每天仅一条记录,包含type、date(日期)和average_record(当日平均心率)三个字段。

内容的提问来源于stack exchange,提问作者Mohammad AlQudah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:40:22