在下面的(超级简化的)代码中,函数get_top_authors()
给了我作者列表,每个人都有他们发表的文章的数量,从发表文章最多的作者到发表文章最少的作者排序,函数get_articles_per_year()
给我一个列表整个数据库每年发表的文章总数。
如果我想要 N 个作者(或前 5 个作者)中每个作者每年的文章数量,我可以重做 N(或 5)次查询。但是,有没有更有效的方法来做到这一点?
from django.db import models
class Author:
name = models.TextField()
class Article:
author = models.ManyToManyField(Author)
year = models.IntegerField()
def get_top_authors():
top_authors = Author.objects.all() \
.annotate(articles=models.Count('article')).order_by('-articles')
def get_articles_per_year():
return Article.objects.all()
.values('year').order_by('year') \
.annotate(articles=models.Count('year'))