在Django中使用外键

时间:2014-10-21 15:57:21

标签: django foreign-keys

我的模型看起来像这样:

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()])这样的东西有效,但速度非常慢。

是否有一种很好的方法可以实现这一目标,或者我是否被迫不经常生成并缓存此信息?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望找到每个货架的总页数。这就是aggregation的作用。

from django.db.models import Count
shelves = Shelf.objects.all().annotate(page_count=Count('book__page')