Consulta de Django: Count and Group BY

Tengo una consulta que estoy tratando de entender el modo "django" de hacerlo: quiero tomar las últimas 100 llamadas de Call. Lo cual es fácil: calls = Call.objects.all () order order_by ('- call_time') [: 100]

Sin embargo, en la siguiente parte no puedo encontrar la manera de hacerlo a través del ORM de django. Quiero get una list de los call_types y el número de llamadas que cada uno tiene dentro de ese queryset anterior que acabo de hacer. Normalmente haré una consulta como esta: "SELECT COUNT (id), calltype FROM call WHERE id IN (SELECCIONE id FROM call PEDIDO BY call_time DESC LIMIT 100) GROUP BY calltype;"

Parece que no puedo encontrar la manera django de hacer esta consulta en particular.

Aquí están mis 2 models:

class Call( models.Model ): call_time = models.DateTimeField( "Call Time", auto_now = False, auto_now_add = False ) description = models.CharField( max_length = 150 ) response = models.CharField( max_length = 50 ) event_num = models.CharField( max_length = 20 ) report_num = models.CharField( max_length = 20 ) address = models.CharField( max_length = 150 ) zip_code = models.CharField( max_length = 10 ) geom = models.PointField(srid=4326) calltype = models.ForeignKey(CallType) objects = models.GeoManager() class CallType( models.Model ): name = models.CharField( max_length = 50 ) description = models.CharField( max_length = 150 ) active = models.BooleanField() time_init = models.DateTimeField( "Date Added", auto_now = False, auto_now_add = True ) objects = models.Manager() 

testing esto:

 calls = Call.objects.all().order_by('-call_time')[:100] types = CallType.objects.filter(call__in=calls).annotate(Count('call')) 

es posible que necesite agregar distinct () a este último queryset.

Con django 1.1.1 esto sorprendentemente no funciona;

 from django.db.models import Count calls = Call.objects.all().order_by('-call_time')[:100] groups = calls.values('calltype').annotate(Count('calltype')) 

funciona, pero regresa a todos los objects, ¡no solo a los 100 seleccionados! no puedo entender

pero esta solución podría ayudar (hoy llamadas resumen agrupado por calltype):

 import datetime Call.objects.order_by('-call_time').filter(call_time__gte=datetime.datetime.today() - datetime.timedelta(days=1)).values('calltype').annotate(Count('calltype'))