【发布时间】:2015-06-05 22:25:00
【问题描述】:
我有一个需要比较的营业时间,如果营业时间超过午夜,我会得到不完整的结果
我的模特
class Hours(models.Model):
dayofweek = models.ForeignKey('Dayofweek')
opentime = models.TimeField(blank=True, null=True)
closetime = models.TimeField(blank=True, null=True)
...
如果我只需要显示小时数,一切正常,例如: 周六下午 5 点至凌晨 2 点
现在,当我尝试查询营业时间以检查商家是否营业时,那些过去午夜营业时间的人将返回 False 为 exists():
我的查询
if Hours.objects.filter(
business__id=id,
dayofweek__pyday=dt,
opentime__lte=mytime,
closetime__gte=mytime).exists():
#do something
有什么建议可以告诉 Django 凌晨 2 点是下午 5 点之后吗?
【问题讨论】:
-
为什么不做 2 次查询... (5pm -11:59 pm) || (上午 12 点 - 凌晨 2 点)?听起来 api 没有设置为你想要的?我的猜测是你可以菊花链 2 个过滤器... Hours.objects.filter().filter().exists()
-
好吧,如果营业时间只是下午 5 点到 10 点,那该怎么办?例如,该应用正在检查下午 5 点到 10 点的商家是否在晚上 9 点营业?
-
请注意:如果当前时间是凌晨 2 点,您也会遇到同样的问题:关闭时间会匹配,而不是开放时间。
-
有点跑题了,你为什么决定将 dayofweek 设置为 ForeignKey。而不是例如IntegerField with options = ((1, 'Monday'), (2, 'Tuesday'),..
-
Maxim,主要原因是当我在数据库中拥有它时,我可以每天都有额外的字段。例如,除了常规名称
Monday,我还有Mon的缩写版本,并且我还存储Python 日期,其中Sunday 是0,因此我不必运行任何转换。