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

neskvpey  于 2023-01-27  发布在  Go
关注(0)|答案(3)|浏览(130)

我正在尝试创建一个django页面,其中列出了所有条目的创建年份。例如:
2010年:

  • 附注四
  • 附注五
  • 附注六

二○ ○九年:

  • 附注1
  • 附注二
  • 附注三

事实证明,这比我预想的要困难得多。数据来源的模型如下:

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

我尝试了几种不同的方法,但似乎每一种方法都遇到了障碍。我猜一种有效的"分组"方法会奏效(PostGres DB Backend),但我似乎找不到任何支持它的Django功能。我试着从数据库中获取单个年份,但我很难找到一种仅通过年份值过滤日期时间字段的方法。我尝试添加note_year@属性,但因为它是派生的,所以无法过滤这些值。
有什么好的建议吗?我想这应该很简单,但是我有一个heckuva时间。任何想法都非常感谢。

pbpqsu0x

pbpqsu0x1#

构造自定义SQL或使用

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

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

这是在基于日期的一般视图中完成的方式。

eyh26e7m

eyh26e7m3#

notes = Note.objects.all().dates('created', 'year')
years = [note.year for note in notes]

Note.objects.filter(created__year__in = years)

相关问题