2011-10-31 48 views
1

我有一個包含日期字段的Django模型:如何定義在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日的活動。

我該怎麼做呢?

謝謝!

回答

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() 
+0

是的,這是因爲據我得到了使用文檔。但是,我該如何動態獲取開始和結束日期?我寧願不硬編碼這些信息。 –

+0

如果今天在設定日期之前; start_date是(設置日期,設置月份,今年-1)結束日期是(設置日期,設置月份,今年),否則start_date是(設置日期,設置月份,今年)結束日期是(設置日期,設置月份,今年+1)。 –

+0

+1:喜歡models.Manager的方法! –

相關問題