mirror of https://github.com/django/django.git
Started a 'Cheat sheet' section in aggregation docs because I desperately need this
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17371 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
4c16e77230
commit
64229eb388
|
@ -41,6 +41,42 @@ used to track the inventory for a series of online bookstores:
|
|||
name = models.CharField(max_length=300)
|
||||
books = models.ManyToManyField(Book)
|
||||
|
||||
Cheat sheet
|
||||
===========
|
||||
|
||||
In a hurry? Here's how to do common aggregate queries, assuming the models above::
|
||||
|
||||
# Total number of books.
|
||||
>>> Book.objects.count()
|
||||
2452
|
||||
|
||||
# Total number of books with publisher=BaloneyPress
|
||||
>>> Book.objects.filter(publisher__name='BaloneyPress').count()
|
||||
73
|
||||
|
||||
# Average price across all books.
|
||||
>>> from django.db.models import Avg
|
||||
>>> Book.objects.all().aggregate(Avg('price'))
|
||||
{'price__avg': 34.35}
|
||||
|
||||
# Max price across all books.
|
||||
>>> from django.db.models import Max
|
||||
>>> Book.objects.all().aggregate(Max('price'))
|
||||
{'price__max': Decimal('81.20')}
|
||||
|
||||
# Each publisher, each with a count of books as a "num_books" attribute.
|
||||
>>> from django.db.models import Count
|
||||
>>> pubs = Publisher.objects.annotate(num_books=Count('book'))
|
||||
>>> pubs
|
||||
[<Publisher BaloneyPress>, <Publisher SalamiPress>, ...]
|
||||
>>> pubs[0].num_books
|
||||
73
|
||||
|
||||
# The top 5 publishers, in order by number of books.
|
||||
>>> from django.db.models import Count
|
||||
>>> pubs = Publisher.objects.annotate(num_books=Count('book')).order_by('-num_books')[:5]
|
||||
>>> pubs[0].num_books
|
||||
1323
|
||||
|
||||
Generating aggregates over a QuerySet
|
||||
=====================================
|
||||
|
|
Loading…
Reference in New Issue