Ponieważ byłem trochę zdezorientowany, jak działa grupowanie w Django 1.1, pomyślałem, że opowiem tutaj o tym, jak dokładnie go używasz. Po pierwsze, powtórzyć to, co powiedział Michael:
Oto, jak właśnie odkryłem, jak to zrobić za pomocą interfejsu API agregacji Django 1.1:
from django.db.models import Count
theanswer = Item.objects.values('category').annotate(Count('category'))
Pamiętaj też, że musisz from django.db.models import Count
!
Spowoduje to wybranie tylko kategorii, a następnie doda adnotację o nazwie category__count
. W zależności od kolejności domyślnej może to być wszystko, czego potrzebujesz, ale jeśli w kolejności domyślnej używane jest inne pole category
, nie zadziała . Powodem tego jest to, że pola wymagane do zamówienia są również zaznaczone i sprawiają, że każdy wiersz jest unikalny, więc nie otrzymasz pogrupowanych rzeczy tak, jak chcesz. Szybkim sposobem rozwiązania tego problemu jest zresetowanie kolejności:
Item.objects.values('category').annotate(Count('category')).order_by()
Powinno to przynieść dokładnie takie rezultaty, jakie chcesz. Aby ustawić nazwę adnotacji, możesz użyć:
...annotate(mycount = Count('category'))...
Następnie otrzymasz adnotację wywołaną mycount
w wynikach.
Wszystko inne związane z grupowaniem było dla mnie bardzo proste. Aby uzyskać bardziej szczegółowe informacje, sprawdź interfejs API agregacji Django .