【发布时间】:2012-06-30 00:32:51
【问题描述】:
我正在努力在 Django 过滤器中逻辑地表示以下内容。我有一个“事件”模型和一个位置模型,可以表示为:
class Location(models.Model):
name = models.CharField(max_length=255)
class Event(models.Model):
start_date = models.DateTimeField()
end_date = models.DateTimeField()
location = models.ForeignKeyField(Location)
objects = EventManager()
对于给定的位置,我想选择今天发生的所有事件。我已经通过 EventManager 中的 'bookings_today' 方法尝试了各种策略,但正确的过滤器语法让我望而却步:
class EventManager(models.Manager):
def bookings_today(self, location_id):
bookings = self.filter(location=location_id, start=?, end=?)
date() 失败,因为这会将时间归零,并且白天的时间对应用程序至关重要,日期的最小值和最大值也是如此,并将它们用作书挡。此外,还有多种可能的有效配置:
start_date < today, end_date during today
start_date during today, end_date during today
start_date during today, end_date after today
我需要编写一整套不同的选项还是有更简单优雅的方法?
【问题讨论】:
-
查看 BETWEEN sql 的范围运算符,另请参阅@danielroseman 的答案:stackoverflow.com/questions/3963201/…