Django中的复杂分组和平均值

4

我的模型结构如下:

class Author(models.Model):
   name = models.CharField(max_length=100)
   age = models.IntegerField()

class Book(models.Model):
   published = models.DateTimeField()
   name = models.CharField(max_length=300, unique=True)
   authors = models.ForeignKey(Author)
   category = models.ForeignKey(Category)

class Category(models.Model):
   name = models.CharField(max_length=100)

我想统计每个作者的书籍数量,这很容易实现,我可以这样做:Author.objects.values('name').annotate(count=Count('book'))
以下几点比较困难:
  • 每位作者所写唯一类别的数量。
  • 作者在某个类别中平均写了多少本书。
  • (这是一个棘手的问题) 作者在某个类别中发表第一篇和最后一篇著作之间的平均时间间隔。
我并不是ORM查询专家,如果我要解决这个问题,我可能会使用很多循环和其他迭代来计算,但我知道这不是正确的方法。
(我知道这种情况中有一些奇怪的东西,例如作者名字上的唯一约束条件,但这是我找到的最好的例子来说明我的问题。)
请问如何解决这个问题?
谢谢。
1个回答

2

哎呀,难啊。

由于这些信息不需要经常刷新,我建议您向作者(Author)模型添加3个字段,然后在书(Book)模型上附加一个post_save信号:每次创建一本书,您只需计算这些值并将它们存储在作者(Author)模型中。

然后您就可以轻松地对它们进行过滤,显示速度非常快,而且在保存时计算时间几乎不会被注意到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接