Python Django:是否按*仅*年值筛选datetime字段?

Python Django:是否按*仅*年值筛选datetime字段?,python,django,django-models,group-by,django-queryset,Python,Django,Django Models,Group By,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_no

我正在尝试弹出一个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
我尝试过几种不同的方法,但似乎在每一条道路上都会遇到障碍。我猜一个有效的“groupby”方法可以做到这一点(postgresdb后端),但我似乎找不到任何支持它的Django功能。我试着从数据库中获取各个年份,但我很难找到一种只按年份值过滤datetime字段的方法。最后,我尝试添加note_year@属性,但因为它是派生的,所以无法过滤这些值


有什么关于优雅的方法的建议吗?我想这应该很简单,但我现在正和它玩得很开心。非常感谢任何想法。

您可以使用或使用字段查找。

可以构建自定义SQL,也可以使用

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

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

这是在基于日期的通用视图中执行的方式

笑不相信这是这么容易;花了数小时寻找这种功能。非常感谢。链接已经失效