2010-06-08 72 views
9

我試圖吐出一個django頁面,它列出了創建年份的所有條目。因此,舉例來說:Django:僅*年份值過濾日期時間字段?

2010:

  • 注4

  • 注5

  • 注6

2009年:

  • 注1

  • 注2

  • 注3

它證明比我預期的更大的困難。從這些數據來源的模型如下:

class Note(models.Model): 
    business = models.ForeignKey(Business) 
    note = models.TextField() 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    class Meta: 
     db_table = 'client_note' 

    @property 
    def note_year(self): 
     return self.created.strftime('%Y') 

    def __unicode__(self): 
     return '%s' % self.note 

我已經嘗試了幾種不同的方式,但似乎遇到了障礙下來的每一條路徑。我猜想一個有效的'group by'方法會做到這一點(PostGres DB Backend),但我似乎無法找到任何支持它的Django功能。我試圖從數據庫中獲得個別年份,但我努力尋找一種按照年份值過濾日期時間字段的方法。最後,我嘗試添加note_year @property,但因爲它是派生的,所以我無法過濾這些值。

任何建議一個優雅的方式來做到這一點?我認爲它應該是非常直接的,但我有一個heckuva的時間。任何想法非常讚賞。

回答

25

無論是構建自定義SQL或使用

date_list = Note.objects.all().dates('created', 'year') 

for years in date_list: 
    Note.objects.filter(created__year = years.year) 

這是它在基於日期通用視圖所做的那樣。

+0

*笑*燦」我相信這很容易;花了數小時尋找這種功能。非常感謝。 – PlankTon 2010-06-08 13:56:19

-1

對於僅由年份值

過濾日期時間字段最好的辦法是

@property 高清note_year(個體經營): 回報self.created.year

相關問題