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

Django中如何使用__range筛选近7天内的订单数据

实现方案

首先需要导入Django官方的时区处理工具,避免项目配置了自定义时区时出现查询偏差:

from django.utils import timezone
from datetime import timedelta

计算时间区间后通过__range筛选即可,示例代码如下:

# 计算7天前的当前时间作为区间起点
start_time = timezone.now() - timedelta(days=7)
# 取当前时间作为区间终点
end_time = timezone.now()

# __range参数接收(起点, 终点)格式的元组
order_list = Order.objects.filter(date_ordered__range=(start_time, end_time))

可选调整:按自然日统计

如果需要统计7天前0点到今日23:59:59的所有订单,可以对时间做截断处理:

# 7天前的0点
start_time = (timezone.now() - timedelta(days=7)).replace(hour=0, minute=0, second=0, microsecond=0)
# 今日的23:59:59
end_time = timezone.now().replace(hour=23, minute=59, second=59, microsecond=999999)

order_list = Order.objects.filter(date_ordered__range=(start_time, end_time))

注意事项

  • 不要直接使用Python原生datetime.datetime.now()生成时间,该方法生成的是本地 naive 时间,和Django存储的带时区信息的时间匹配时会出现偏差甚至报错。
  • __range查询包含边界值,即刚好等于起始时间或结束时间的订单也会被纳入结果集。

内容的提问来源于stack exchange,提问作者Manas Man Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:00:01