Django午夜营业时间TimeField比较错误 [英] Django After Midnight Business Hours TimeField Comparison Error

查看:214
本文介绍了Django午夜营业时间TimeField比较错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个营业时间,我需要比较,如果营业时间过去了午夜,我会得到不完整的结果。

I have a Business Hours that I need to compare and I'm getting incomplete results if the business hours are past midnight

我的模型

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

如果我只需要显示几小时,所有工作都可以这样做:
星期六下午5点 - 2点

If I just need to display hours everything works OK such: Saturday 5pm - 2am

现在,当我'试图查询几个小时以检查业务是否开放,那些过去午夜的人将返回 False exists()

Now when I'm trying to query the hours to check if the business is even open, those with past midnight hours will return False for exists():

我的查询

if Hours.objects.filter(
            business__id=id,
            dayofweek__pyday=dt, 
            opentime__lte=mytime, 
            closetime__gte=mytime).exists():
    #do something

任何建议如何告诉Django上午2点在下午5点之后?

Any suggestions how to tell Django that the 2am is after 5pm?

推荐答案

如何使用

What about using F and Q expressions through two queries:

一个简单的例子(开放时间<=关闭时间)

one for the simple case (opening time <= closing time)

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

,一个用于奇数情况(关闭时间<开放时间)

and one for the odd case (closing time < opening time)

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

这篇关于Django午夜营业时间TimeField比较错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆