python - Django 午夜营业时间后 TimeField 比较错误

标签 python django

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

我的模型

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

如果我只需要显示时间,一切正常,例如: 周六下午 5 点 - 凌晨 2 点

现在,当我尝试查询营业时间以检查企业是否营业时,午夜过后的营业时间将为 exists() 返回 False:

我的问题

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

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

最佳答案

一天可以有多个时段,但无论如何,一天在晚上 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,所以这只是一些伪代码和我会使用的替代方法。

关于python - Django 午夜营业时间后 TimeField 比较错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30676702/

相关文章:

python - 如何使此枚举类型支持迭代?

ruby-on-rails - 在没有 root 访问权限的服务器上使用 Django(或 Ruby on Rails)?

python - 如何根据条件将数据框中的一列分割为多个系列

python - 如何在pygame中显示由点组成的圆圈?

django - 如何序列化 API 响应(在 JSON 中)并在 Django Rest Framework 中修改和添加字段?

javascript - django - 使用 javascript 将值插入文本字段

python - PyCharm,Django : zero code coverage

python - Django 静态文件未加载且没有错误标志

python - lambda 表达式如何绑定(bind)到一个类?

python - Beautifulsoup 错误 'ResultSet' 对象没有属性 'findAll'