Django中如何判断Order模型date_ordered与当前日期间隔是否在7天内
实现方案
1. 正确的当前时间获取方式
你当前使用的datetime.datetime.now()生成的是不带时区信息的时间对象,如果Django项目开启了默认的时区配置(settings.py中USE_TZ = True),和模型中auto_now_add=True生成的带时区的date_ordered字段比对时会出现类型报错,更稳妥的获取方式是用Django自带的时区工具:
from django.utils import timezone current_time = timezone.now()
返回的时间对象和模型字段的类型完全匹配,不会出现兼容问题。
2. 两种常见判断场景的实现
场景1:批量过滤7天内的所有订单
如果是要从数据库查询符合条件的订单,直接在ORM层过滤效率最高:
from django.utils import timezone from datetime import timedelta # 计算7天前的时间节点 seven_days_ago = timezone.now() - timedelta(days=7) # 直接过滤出所有7天内创建的订单 recent_orders = Order.objects.filter(date_ordered__gte=seven_days_ago)
场景2:判断单个订单是否在7天内创建
如果已经拿到了单个Order实例,直接做时间比对即可:
from django.utils import timezone from datetime import timedelta def is_order_recent(order: Order): seven_days_ago = timezone.now() - timedelta(days=7) # 返回True说明在7天以内,返回False说明超出7天 return order.date_ordered >= seven_days_ago
如果需要忽略时分秒、只按自然日的日期差判断,可以调整为:
def is_order_recent_by_date(order: Order): today = timezone.now().date() order_create_date = order.date_ordered.date() return (today - order_create_date).days <=7
内容的提问来源于stack exchange,提问作者Manas Man Singh
相关产品推荐
相关产品推荐

