Оскільки я був трохи заплутаний щодо того, як працює групування в 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 .