python – Django中的复杂分组和平均值

我有这样的模型结构:

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查询大师,如果我不得不解决这个问题,我可能最终会使用很多循环和其他迭代来计算这个,但我知道这不是正确的方法.

(我知道这种情况下的一些事情很奇怪,例如对作者姓名的一个独特约束,但这是我发现的最好的例子来说明我的问题.)

有关如何实现这一目标的任何帮助?

谢谢.

最佳答案 哎哟,很难的.

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

然后,您将能够轻松地过滤它们,显示速度非常快,并且无论如何在保存时,计算它的时间几乎无法检测.

点赞