Django:过滤日期时间字段*仅*年份值?

Pla*_*Ton 11 python django group-by django-models django-queryset

我正在尝试吐出一个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
Run Code Online (Sandbox Code Playgroud)

我尝试了几种不同的方式,但似乎遇到了各种障碍.我猜测一个有效的'分组'方法可以解决这个问题(PostGres DB Backend),但我似乎无法找到任何支持它的Django功能.我尝试从数据库中获取个别年份,但我很难找到一种仅按年份值过滤datetime字段的方法.最后,我尝试添加note_year @property,但因为它是派生的,所以我无法过滤这些值.

有什么建议以优雅的方式做到这一点?我认为它应该非常简单,但我有一个heckuva时间.任何想法都非常感激.

zov*_*ion 31

构造自定义SQL或使用

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

for years in date_list:
    Note.objects.filter(created__year = years.year)
Run Code Online (Sandbox Code Playgroud)

这是在基于日期的通用视图中完成的方式.

  • *笑* 不敢相信这么容易;花了几个小时寻找这种功能。非常感谢。 (2认同)