比较Django的日间范围

时间:2015-04-13 18:21:26

标签: python django

我的表格有两列,用于存储特定交易开始和结束的日期。这些列的值是整数,并遵循Python使用的日期时间库的相同模式。

我的逻辑目前适用于不会围绕一周的日间范围,即。周一至周五,周四至周六,周二至周四等。我不确定如何捕捉下周的交易,如周五,周一,周六,周二等。以下是我的发言使用Django:

Deal.objects.filter(Q(deal_day_start__lte=current_day) & Q(deal_day_end__gte=current_day))

显然,这给了我周五 - 周一范围的问题,因为例如当前日可以是星期日,日期时间是0,交易开始日是星期五的5。

有没有一种简单的方法可以使用Django来解决这个问题?如果我使用Python if else语句,我显然可以创建几个分支并捕获这个场景,但我不确定如何使用Django进行此操作。

1 个答案:

答案 0 :(得分:2)

鉴于使用的架构,我建议:

Deal.objects.filter(
  Q(deal_day_start__lte=current_day, deal_day_end__gte=current_day) | 
  Q(deal_day_start__lte=current_day, deal_day_end__lt=F("deal_day_start")) | 
  Q(deal_day_start__gte=current_day, deal_day_end__gte=current_day, deal_day_end__lt=F("deal_day_start"))
)

让我们观察到,结束日的交易必须小于开始日。我们当前有3个案件属于交易期:

  • 如果当天是在开始日和结束日之间。
  • 如果当前日期大于开始日期但是大于结束日期,那么这意味着交易必须换行。
  • 如果当前日期小于开始日期,那么交易必须换行。但不仅包装,而且在当天结束后也完成。