(actualización:.. La agregación de apoyo ORM completa Ahora se incluye en Django 1.1 Fiel a la continuación de advertencia sobre el uso de las API privadas, el método documentado aquí ya no trabaja en la post-1.1 versiones de Django no he cavado en para averiguar por qué, si está en 1.1 o posterior debe utilizar el aggregation API real de todos modos.)
El soporte de agregación de núcleo ya estaba allí en 1.0; simplemente no está documentado, no es compatible y aún no cuenta con una API amigable. Pero aquí es cómo se puede utilizar de todos modos hasta que llega 1.1 (a su propio riesgo, y en pleno conocimiento de que el atributo query.group_by no es parte de una API pública y podría cambiar):
query_set = Item.objects.extra(select={'count': 'count(1)'},
order_by=['-count']).values('count', 'category')
query_set.query.group_by = ['category_id']
Si a continuación iterar sobre query_set, cada valor devuelto será un diccionario con una clave de "categoría" y una clave de "conteo".
No tiene que hacer un pedido por -count aquí, solo se incluye para demostrar cómo se hace (tiene que hacerse en la llamada .extra(), no en otra parte de la cadena de construcción de queryset). Además, podría decir count (id) en lugar de count (1), pero este último puede ser más eficiente.
Tenga en cuenta también que al establecer .query.group_by, los valores deben ser nombres de columna DB reales ('category_id') no nombres de campo Django ('categoría'). Esto se debe a que está ajustando las consultas internas en un nivel donde todo está en términos de DB, no en términos de Django.
Posible duplicado de [¿Cómo consultar como GROUP BY en django?] (Http://stackoverflow.com/questions/629551/how-to-query-as-group-by-in-django) –
El consenso actual es cerrar por "calidad": Dado que la "calidad" no es medible, simplemente me someto a upvotes. ;-) Probablemente se deba a qué pregunta golpear a las mejores palabras clave de Google novato en el título. –