我有这样的模型结构:
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)
我想要计算每个作者的Books
。这很简单,因为我可以这样做:Author.objects.values('name').annotate(count=Count('book'))
。
我在计算这些方面遇到了很多困难:
我不是ORM查询专家,如果我不得不解决这个问题,我可能最终会使用很多循环和其他迭代来计算这个,但我知道这不是正确的方法来做到这一点
(我知道这种情况下的一些事情很奇怪,例如对作者姓名的一个独特约束,但这是我发现的最好的例子来说明我的问题。)
有关如何实现这一目标的任何帮助?
感谢。
答案 0 :(得分:2)
哎哟,很难。
由于这些不是您经常需要刷新的信息,我建议您在Author
模型中添加3个字段,然后在Book
模型上附加post_save信号:每次a本书已创建,您只需计算这些值并将其存储在Author
模型中。
然后,您将能够轻松地过滤它们,显示速度非常快,无论如何都会在保存时几乎无法计算出计算时间。