1
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 做到这一点?某种聚合?

4

2 回答 2

3

像这样的东西可以工作:

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

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

于 2013-02-05T22:25:45.383 回答
1

尝试类似:

from django.db.models import Count

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

结果应该在page_count[0].chapter__pages__count. 查看文档以获取更多信息。

于 2013-02-05T23:09:08.527 回答