Refs #25136 -- Fixed nonexistent field reference in aggregation topic guide.

Thanks Ankush Thakur for the report and Simon for the review.
This commit is contained in:
Tim Graham 2016-04-27 14:49:29 -04:00
parent 417e083e55
commit fe70f280d7
1 changed files with 7 additions and 6 deletions

View File

@ -193,24 +193,25 @@ Combining multiple aggregations with ``annotate()`` will `yield the wrong
results <https://code.djangoproject.com/ticket/10060>`_ because joins are used
instead of subqueries:
>>> Book.objects.first().authors.count()
>>> book = Book.objects.first()
>>> book.authors.count()
2
>>> Book.objects.first().chapters.count()
>>> book.store_set.count()
3
>>> q = Book.objects.annotate(Count('authors'), Count('chapters'))
>>> q = Book.objects.annotate(Count('authors'), Count('store'))
>>> q[0].authors__count
6
>>> q[0].chapters__count
>>> q[0].store__count
6
For most aggregates, there is no way to avoid this problem, however, the
:class:`~django.db.models.Count` aggregate has a ``distinct`` parameter that
may help:
>>> q = Book.objects.annotate(Count('authors', distinct=True), Count('chapters', distinct=True))
>>> q = Book.objects.annotate(Count('authors', distinct=True), Count('store', distinct=True))
>>> q[0].authors__count
2
>>> q[0].chapters__count
>>> q[0].store__count
3
.. admonition:: If in doubt, inspect the SQL query!