Django 1.1 supporta i metodi di aggregazione come il conteggio. È possibile trovare the full documentation here.
Per rispondere alla tua domanda, è possibile utilizzare qualcosa sulla falsariga di:
from django.db.models import Count
q = Player.objects.annotate(Count('games'))
print q[0]
print q[0].games__count
questo dovrà lieve ritocco a seconda del modello attuale.
Modifica: il frammento sopra riportato genera aggregazioni per ogni oggetto. Se si desidera aggregazione in un particolare campo nel modello, è possibile utilizzare il metodo values
:
from django.db.models import Count
q = Player.objects.values('playertype').annotate(Count('games')).order_by()
print q[0]
print q[0].games__count
order_by()
è necessario perché i campi che sono l'ordinamento di default vengono selezionati automaticamente anche se non sono esplicitamente passati al values()
. Questa chiamata a order_by()
cancella qualsiasi ordine e fa sì che la query si comporti come previsto.
Inoltre, se si desidera contare il campo che viene utilizzato per il raggruppamento (equivalente a COUNT(*)
), è possibile utilizzare:
from django.db.models import Count
q = Player.objects.values('playertype').annotate(Count('playertype')).order_by()
print q[0]
print q[0].playertype__count
fonte
2009-05-08 22:25:40
Possibile duplicato di [Django: come fare SELECT COUNT (\ *) GROUP BY e ORDER BY] (http://stackoverflow.com/questions/19101665/django-how-to-do-select-count -group-by-and-order-by) –