Поскольку я был немного сбит с толку тем, как работает группировка в 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 для получения более подробной информации.