我的模型看起来像这样:
class Shelf(models.Model):
name = models.CharField(max_length=20)
class Book(models.Model):
shelf = models.ForeignKey(Shelf)
name = models.CharField(max_length=20)
class Page(models.Model):
book = models.ForeignKey(Book)
name = models.CharField(max_length=20)
我想制作一个货架清单,其中包含它们包含的内容摘要:
Shelf | Books | Pages
------------------------
Home | 12 | 2000
Office | 8 | 1300
我可以使用book_set.count
轻松计算书籍数量,但这似乎没有进一步扩展(思考book_set.page_set.count
)。像sum([p.page_set().count for p in book_set.all()])
这样的东西有效,但速度非常慢。
是否有一种很好的方法可以实现这一目标,或者我是否被迫不经常生成并缓存此信息?
答案 0 :(得分:0)
如果我理解正确,您希望找到每个货架的总页数。这就是aggregation的作用。
from django.db.models import Count
shelves = Shelf.objects.all().annotate(page_count=Count('book__page')