我正在尝试吐出一个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
我尝试过几种不同的方法,但似乎每条路都遇到障碍。我猜测一个有效的'分组'方法可以解决这个问题(PostGres DB Backend),但我似乎无法找到任何支持它的Django功能。我尝试从数据库中获取个别年份,但我很难找到一种仅按年份值过滤datetime字段的方法。最后,我尝试添加note_year @property,但由于它是派生的,我无法过滤这些值。
有任何关于优雅方式的建议吗?我认为它应该非常简单,但我有一个heckuva时间。任何想法都非常赞赏。
答案 0 :(得分:28)
构建自定义SQL或使用
date_list = Note.objects.all().dates('created', 'year')
for years in date_list:
Note.objects.filter(created__year = years.year)
这是在基于日期的通用视图中完成的方式。
答案 1 :(得分:3)
您可以使用django.views.generic.date_based.archive_year或使用year字段查找。