Поскольку я был немного озадачен тем, как работает группировка в Django 1.1, я подумал, что здесь я подробно остановлюсь на том, как именно вы собираетесь использовать его. Во-первых, чтобы повторить то, что сказал Майкл:
Вот, как я только что обнаружил, как это сделать с помощью API агрегации Django 1.1:
from django.db.models import Count
theanswer = Item.objects.values('category').annotate(Count('category'))
Обратите внимание, что вам нужно from django.db.models import Count
!
При этом будут выбраны только категории, а затем добавлена аннотация с именем category__count
. В зависимости от порядка по умолчанию это может быть все, что вам нужно, , но если для порядка по умолчанию используется поле, отличное от category
, это не будет работать . Причина этого заключается в том, что поля, необходимые для упорядочения, также выбраны и делают каждую строку уникальной, поэтому вы не сможете группировать вещи так, как вам этого хочется. Один из быстрых способов исправить это - сбросить порядок:
Item.objects.values('category').annotate(Count('category')).order_by()
Это должно дать именно те результаты, которые вы хотите. Для задания названия аннотации вы можете использовать:
...annotate(mycount = Count('category'))...
Тогда у вас будет аннотация под названием mycount
в результатах.
Все остальное в группировке было очень простым для меня. Обязательно ознакомьтесь с API агрегирования Django для получения более подробной информации.