如何使用Django ORM按年份列出所有带文章计数的文章

Kev*_*vin 4 django django-templates django-models django-views

我正在尝试使用django ORM获取所有文章的年份列表,旁边有文章计数,例如:

2010(5篇)
2009(4篇)
2008(9篇)

我尝试过这样的事情:

archive = Articles.objects.dates('created','year').annotate(archive_count = Count('created'))

要么:

archive = Articles.objects.values('created').annotate(archive_count = Count('created'))

要么:

archive = Articles.objects.values('created').aggregate(archive_count = Count('created'))

最后一个给了我正确的计数,但是没有给我任何年份值,其他的给出了任何一个的混合,或者每行的archive_count被设置为1.

我出错的任何想法?

Ome*_*tel 5

这是一种在一个查询中执行此操作的方法:

Article.objects.extra(select={'year':"strftime('%%Y',created)"}).values('year').order_by().annotate(Count('id'))
Run Code Online (Sandbox Code Playgroud)

请注意,您必须strftime('%%Y',created)根据您的数据库进行替换(我使用的是sqlite).