python - 如何确定给定自定义营业时间的事件的最近的前一个工作日?

标签 python django database-design datetime

对于具有自定义营业时间和事件的给定企业,我需要弄清楚如何获取每个事件的最近的前一个工作日(例如一周的事件)。例如,假设一家企业的营业时间为周日、周三、周五和周六。鉴于事件于 2011 年 6 月 22 日星期三下午 3 点开始,我如何有效地确定 2011 年 6 月 19 日星期日是距该事件最近的前一个工作日?以下是型号:

class Business(models.Model):
  name = models.CharField(max_length=50)

class BusinessHours(models.Model):
  """
  I realize there are better ways to store business hours, 
  but this approach is simple and serves my purposes for now.
  However, if another schema solves the problem above more efficiently, 
  feel free to make a suggestion.
  """
  business = models.ForeignKey(Business)
  sunday_open = models.TimeField(blank=True, null=True)
  sunday_close = models.TimeField(blank=True, null=True)
  monday_open = models.TimeField(blank=True, null=True)
  monday_close = models.TimeField(blank=True, null=True)
  ... continue for each day ...

class Event(models.Model):
  business = models.ForeignKey(Business)
  start = models.DateTimeField()
  end = models.DateTimeField()

我假设除了 Django 之外,大部分工作都需要在 python 中进行,因此如果 Django 模型使解决方案变得复杂,请忽略它。如果需要,我很乐意提供更多信息。提前致谢!

最佳答案

您将需要对用 python 编写的数据库进行查询。我会查看django docs关于如何进行数据库查询和 appendix字段查找。

基本格式可能类似于:

# Will return a list of dictionary objects for all rows with that foreign key
# Ex: [{'business' : '3', 'monday_open' : someTime, 'monday_close' : someTime...},...]
storeHours = BuisnessHours.objects.values().filter(business = *foreign key*)

# You can also get your even like this
# Ex: [{'business' : '3', 'start' : someTime, 'end' : someTime}, {'business' : '3'...]
storeEvent = Event.objects.values().filter(business = *same foreign key as above*)

*注意,如果您想为每个商店保存不同的事件,那么在事件模型中最好有一个“名称”列,这样您还可以根据特定事件进行查询。另外,不要使用 TimeField,而是尝试使用 DateTimeField,这样如果需要,您也可以保存日期。

取回查询字典后,在 python 中对开始时间和结束时间进行分组应该很简单,看看哪些时间最接近事件的范围。为此,我还要看一下 datetime module

我也想看看at this question 。他通过查询格式的列表理解做了一些非常有趣的事情。

可能有一种更有效的方法可以简单地通过字段查找来完成此操作,所以我也会研究一下。

关于python - 如何确定给定自定义营业时间的事件的最近的前一个工作日?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6362564/

相关文章:

mysql - 客户/公司地址/电话号码

python - 在调用者线程中捕获线程的异常?

python - 在Python中的类函数中使用exec时出现问题

django - 我正面临启动 runserver django?

python - 我怎样才能在我的模板中获取 JSONfield 的值

mysql - 在 MySQL 中存储用户偏好的最佳方式 - BINARY 或 INT

python - zsh :/usr/local/bin/youtube-dl: bad interpreter:/usr/local/opt/python/bin/python2. 7: 没有那个文件或目录

python - 使用 'all' 确定数字是否按升序排列

python - 为什么我的一些文件被复制了?

database-design - 数据库设计 - 文章、博客文章、照片、故事