在Django中,我如何获得两个以上模型的聚合数据

时间:2013-02-05 22:14:27

标签: django orm models aggregate django-queryset

class Book(models.Model):
    # fields

class Chapter(models.Model):
     book = models.ForeignKey(Book)

class Page(models.Model):
     chapter = models.ForeignKey(Chapter)

如果我想知道该特定书籍“A”中的页数,实现这一目标的最佳方法是什么?

当然,我可以循环阅读A书的章节并总结每章的页面,但我认为这不是更聪明的方法。

有没有办法通过ORM / Queryset来做到这一点?某种聚合?

2 个答案:

答案 0 :(得分:3)

这样的事情可行:

book_a = Book.objects.get(name='A')
page_count = Page.objects.filter(chapter__book=book_a).count()

这将导致数据库连接,该连接将返回其章节来自A书的页数。

答案 1 :(得分:1)

尝试类似:

from django.db.models import Count

page_count = Book.objects.filter(name='A').annotate(Count(chapter__pages))

结果应该在page_count[0].chapter__pages__count。有关详细信息,请查看documentation