如何在Django中定义跨年、跨月的日期范围?
我有一个Django模型,其中有一个日期字段:
class Event(models.Model):
event_date = models.DateField()
我想在这个模型上创建一个管理器,只显示在一个特定时间段内发生的事件,这个时间段是从每年的7月1日到下一年的6月31日。
比如说,今年我想返回从2011年7月1日到2012年6月31日之间的事件。当当前日期到达2012年7月1日时,我们就显示2012年7月1日到2013年6月31日之间的事件。
我该怎么做呢?
谢谢!
1 个回答
3
直接来自文档:
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Event.objects.filter(event_date__range=(start_date, end_date)
https://docs.djangoproject.com/en/dev/ref/models/querysets/#range
所以唯一的挑战就是弄清楚现在是哪一年,然后调整开始和结束日期来反映这一点。这里有一种管理者的方法:
class EventManager(models.Manager):
def get_query_set(self):
# Quick check to see what dates we should search within
return super(EventManager, self).get_query_set().filter(event_date__range=(start_date, end_date))
class Event(models.Model):
this_year = EventManager()
...
现在你可以进行查询:
Event.this_year.all()