Django 1.1 admite métodos de agregación como count. Puede encontrar the full documentation here.
Para responder a su pregunta, se puede usar algo a lo largo de las líneas de:
from django.db.models import Count
q = Player.objects.annotate(Count('games'))
print q[0]
print q[0].games__count
Esto tendrá que ajustar ligeramente dependiendo del modelo real.
Editar: El fragmento de arriba genera agregaciones por objeto. Si desea que la agregación en un campo en particular en el modelo, se puede utilizar el values
método:
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()
es necesaria porque los campos que se encuentran en el orden predeterminado se seleccionan automáticamente, incluso si no se pasan explícitamente a values()
. Esta llamada al order_by()
borra cualquier orden y hace que la consulta se comporte como se esperaba.
Además, si se desea contar el campo que se utiliza para la agrupación (equivalente a COUNT(*)
), puede utilizar:
from django.db.models import Count
q = Player.objects.values('playertype').annotate(Count('playertype')).order_by()
print q[0]
print q[0].playertype__count
Posible duplicado de [Django: cómo hacer SELECCIONAR COUNT (\ *) GROUP BY y ORDER BY] (http://stackoverflow.com/questions/19101665/django-how-to-do-select-count -group-by-and-order-by) –