对于具有自定义BusinessHours和Events的给定业务,我需要弄清楚如何为每个事件(比如一周的事件)获取最近的前一个工作日。例如,假设一家企业在周日、周三、周五和周六都有营业时间。如果活动于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文档以及字段查找的附录。
基本格式可能看起来像:
# 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*)
*请注意,如果每个存储要保存不同的事件,则最好在事件模型中有一个"name"列,这样您也可以根据某个事件进行查询。此外,如果您愿意,也可以使用DateTimeField保存日期,而不是使用TimeField。
取回查询字典后,应该可以简单地在python中对开始和结束时间进行分组,查看哪些时间最接近事件的范围。为此,我还将查看datetime模块。
我也想看看这个问题。他在查询格式的列表理解方面做了一些非常有趣的事情。
不过,可能有一种更有效的方法可以通过简单的字段查找来做到这一点,所以我也会研究一下。