我有这样的模型结构:
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信号:每次创建一本书时,您只需计算这些值并存储他们在作者模型中.
然后,您将能够轻松地过滤它们,显示速度非常快,并且无论如何在保存时,计算它的时间几乎无法检测.