【问题标题】:Simple Django Aggregation - Optimization简单的 Django 聚合 - 优化
【发布时间】:2017-02-08 09:31:34
【问题描述】:

我正在阅读annotating and aggregating 的开头,我想知道哪种方式最适合完成以下情况:

您想计算查询集中每本书的作者数量。本教程建议使用annotate

Book.objects.annotate(Count('authors'))

我的问题是,当您可以使用模型实例方法完成此操作时,为什么要这样做:

#models.py
class Book(models.Model):
  authors = models.ManyToManyField(Author)

  def author_count(self):
    return self.authors.count()

#views.py
books = Book.objects.all()

#template.html
{% for book in books %}
  {{ book.author_count }}
{% endfor %}

一种情况比另一种更好吗?我缺少哪些优化优势?

【问题讨论】:

    标签: django django-queryset django-aggregation


    【解决方案1】:

    因为那样你将不得不查询模型:

    Books.objects.all()  # Or any other filter
    

    然后你打电话给count() - 一旦你为多个对象(书籍)做这件事,你就会为你打电话给count()的每本书打数据库!

    使用annotate 时,您将只访问数据库一次,并以字典/列表的形式获取查询中所有书籍的结果。

    【讨论】:

      猜你喜欢
      • 2018-02-18
      • 1970-01-01
      • 2021-12-15
      • 2021-12-17
      • 2010-12-18
      • 2017-11-03
      • 2014-12-14
      • 1970-01-01
      • 2018-07-06
      相关资源
      最近更新 更多