2010-06-08 69 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

相关问题