如何在Django中定义跨越年,月的日期范围?

时间:2011-10-31 17:35:54

标签: python django date model filtering

我有一个包含日期字段的Django模型:

class Event(models.Model):
    event_date = models.DateField()

我想在此模型上有一位经理,仅显示在定义为7月1日(当前年度)至6月31日(以下年度)的时间段内发生的事件。

因此,对于今年,我想要从2011年7月1日到2012年6月31日返回活动。当当前日期到2012年7月1日时,我们将展示发生在2013年6月31日的活动。< / p>

我将如何做到这一点?

谢谢!

1 个答案:

答案 0 :(得分: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()