在 Django 中,我如何获得两个以上模型的聚合数据
Posted
技术标签:
【中文标题】在 Django 中,我如何获得两个以上模型的聚合数据【英文标题】:In Django how can i get aggregated data on more than two models 【发布时间】:2013-01-20 23:58:35 【问题描述】: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 做到这一点?某种聚合?
【问题讨论】:
【参考方案1】:这样的事情可能会奏效:
book_a = Book.objects.get(name='A')
page_count = Page.objects.filter(chapter__book=book_a).count()
这将导致数据库连接,这将返回章节来自 A 书的页数。
【讨论】:
【参考方案2】:尝试类似:
from django.db.models import Count
page_count = Book.objects.filter(name='A').annotate(Count(chapter__pages))
结果应该在page_count[0].chapter__pages__count
中。查看documentation 了解更多信息。
【讨论】:
以上是关于在 Django 中,我如何获得两个以上模型的聚合数据的主要内容,如果未能解决你的问题,请参考以下文章