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

1 投票
1 回答
1869 浏览
提问于 2025-04-17 05:21

我有一个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()

撰写回答