Django中如何查询并返回当月每日销售的订单量及销售额统计
Django 当月每日销售数据统计实现方案
首先导入需要的依赖:
from django.db.models import F, Sum, Count from django.db.models.functions import ExtractDay from datetime import datetime # 若项目开启时区支持,用下面的导入代替datetime # from django.utils import timezone
函数实现如下:
def get_current_month_daily_sales(): # 取当前时间,开启时区支持则替换为 timezone.now() now = datetime.now() # 筛选当月所有订单 monthly_orders = Order.objects.filter( created__year=now.year, created__month=now.month ) # 按天分组统计 daily_sales = monthly_orders.annotate( day=ExtractDay('created') ).values('day').annotate( count=Count('id'), total=Sum(F('price') * F('quantity')) ).order_by('day') return daily_sales
逻辑说明
- 动态取当前年月过滤订单,进入下一月后会自动切换统计范围,不需要手动修改规则
- 用
ExtractDay提取订单创建时间的日期值作为分组维度 Count('id')统计对应日期的订单总数量,Sum(F('price') * F('quantity'))计算对应日期的销售总额,F表达式用来直接取单条订单的商品单价和数量做乘积运算- 最终返回结果的格式和你期望的完全一致,每日新增的订单会自动对应到所属日期的统计项中,无订单的日期默认不会出现在结果中,若需要展示无订单日期的0值统计,可自行生成当月完整日期列表和查询结果做合并处理。
内容的提问来源于stack exchange,提问作者Sammy
相关产品推荐
相关产品推荐

