Django午夜营业时间后时间域比较E

2024-09-26 17:40:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个工作时间,我需要比较,我得到不完整的结果,如果工作时间超过午夜

我的模型

class Hours(models.Model):
  dayofweek = models.ForeignKey('Dayofweek')
  opentime = models.TimeField(blank=True, null=True)
  closetime = models.TimeField(blank=True, null=True)
  ...

如果我只需要显示小时,一切正常,如: 星期六下午5点到2点

现在,当我试图查询营业时间以检查是否营业时,那些超过午夜营业时间的营业时间将返回Falsefor exists()

我的疑问

^{pr2}$

有什么建议可以告诉Django凌晨2点是下午5点以后吗?在


Tags: 模型truemodelmodels时间nullclassblank
2条回答

一天可以有多个时段,但不管怎样,一天都会在晚上11:59结束。如果这种情况持续到第二天,你就必须打破你的时间间隔。就像你的过滤器一样。。。在

# Spans over 2 days
if opentime > closetime:
  Hours.objects.filter(
    business_id=id,
    dayofweek_pyday=dt,
    opentime_tye=myOpenTime,
    closetime_gte=11:59:99
  ).exists() ||
  Hours.objects.filter(
    business_id=id,
    # Next date
    dayofweek_pyday=dt + 1,
    opentime_tye=00:00:00,
    closetime_gte=myCloseTime
  ).exists()
# Spans over 1 day
else:
   Hours.objects.filter(
   business__id=id,
   dayofweek__pyday=dt, 
   opentime__lte=myOpentime, 
   closetime__gte=myClosetime).exists()

我不知道django,所以这只是一些伪代码,我将使用另一种方法。在

通过两个查询使用F and Q expressions怎么样:

一个用于简单情况(打开时间<;=关闭时间)

Hours.objects.filter(
         opentime__lte=F('closetime'),
         business__id=id,
         dayofweek__pyday=dt, 
         opentime__lte=mytime, 
         closetime__gte=mytime).exists():

奇数情况下一个(关闭时间<;打开时间)

^{pr2}$

相关问题 更多 >

    热门问题