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

如何使用Django实现分析面板多维度记录计数统计需求?

问题修正

首先你写的查询语句有问题,Records.objects.filter(id=pk) 是查询主键为pk的单条Records记录,要查询特定用户的所有关联记录,应该按外键筛选:

# 方案A:通过用户反向查询
user = User.objects.get(id=pk)
user_records = user.records_set.all()

# 方案B:直接筛选Records表的owner字段
user_records = Records.objects.filter(owner_id=pk)

另外你提供的Records模型定义中缺少统计需要的status字段,需要先补充:

class Records(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=120)
    code = models.CharField(max_length=16)
    type = models.CharField(max_length=32)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now = True)
    # 新增status字段
    status = models.CharField(max_length=16, choices=(('active','活跃'),('inactive','非活跃')), default='active')

方案对比与最优选择

你提到的两个方案都不是最优解,Django支持单次聚合查询拿到所有统计指标,比两个方案的性能都好:

  • 方案1需要发起6次独立查询,会产生不必要的数据库IO开销,完全不推荐
  • 方案2适合单用户记录量小于1万、且后续做图表需要全量明细数据的场景,一次拉回所有数据既可以算统计,也可以直接给图表做数据源,不需要二次查询
  • 最优方案是用数据库聚合能力,1次查询拿到所有统计值,性能最好、资源占用最低,适合所有场景,尤其是单用户记录量较大的情况

最优实现代码

from django.db.models import Count, Q
from django.utils import timezone
from datetime import timedelta

# 计算时间边界
now = timezone.now()
today_start = now.replace(hour=0, minute=0, second=0, microsecond=0)
# 周一作为本周起点,要周日为起点的话调整计算逻辑即可
week_start = today_start - timedelta(days=today_start.weekday())
month_start = today_start.replace(day=1)

# 单次聚合查询拿到所有统计
stats = Records.objects.filter(owner_id=pk).aggregate(
    total = Count('id'),
    today_add = Count('id', filter=Q(created_at__gte=today_start)),
    week_add = Count('id', filter=Q(created_at__gte=week_start)),
    month_add = Count('id', filter=Q(created_at__gte=month_start)),
    active_total = Count('id', filter=Q(status='active')),
    inactive_total = Count('id', filter=Q(status='inactive'))
)

查询结果stats是字典格式,直接可以当做上下文传入模板渲染面板。

后续图表接入建议

如果后续要做按时间、按类型分组的图表,可以直接在聚合查询里加annotate分组逻辑,不需要拉全量明细,性能远高于内存计算。如果需要做用户自定义维度的探索性图表,再考虑拉全量数据到前端做动态计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:27:05