如何在Django中判断今日是否处于DateField的日期区间内?
Django日期范围查询错误:判断今日是否在促销起止日期之间
你的查询条件逻辑写反了,导致无法匹配到目标记录。
问题分析
你原查询中的条件:
Promos.objects.filter(codigo = codigo_forma, inicia__gte = today,finaliza__lte=today).exists()
要求inicia(开始日期)大于等于今日,同时finaliza(结束日期)小于等于今日——这意味着只有当促销的起止日期都等于今日,或者起止日期包含在今日之前的时段时才会匹配,完全不符合“今日处于促销时间段内”的需求。
正确的查询代码
from datetime import date today = date.today() # 判断今日是否在促销起止日期之间的正确查询 promo_active = Promos.objects.filter( codigo=codigo_forma, inicia__lte=today, # 开始日期 ≤ 今日 finaliza__gte=today # 结束日期 ≥ 今日 ).exists()
逻辑说明
要验证今日是否在促销的有效时段内,需要满足两个核心条件:
- 促销已经开始:
inicia不能晚于今日(inicia <= today) - 促销尚未结束:
finaliza不能早于今日(finaliza >= today)
对应到你的测试数据:inicia=2022-08-23 ≤ 2022-08-25,且finaliza=2022-11-30 ≥ 2022-08-25,符合上述条件,查询会返回True。
内容的提问来源于stack exchange,提问作者Jorge López
相关产品推荐
相关产品推荐

