2012-10-10 14 views
5

Imagínese que tengo el siguiente modelo:Obtener la lista de incidencias + contar en un modelo Django?

class Person(models.Model): 
    ...other stuff... 
    optional_first_name= models.CharField(max_length=50, blank=True) 

¿Cómo hago para escribir una petición que devuelve una matriz de los nombres más populares, con el fin de ocurrencia decreciente, con sus cargos, sin tener en cuenta los nombres vacíos?

es decir, para una base de datos con 13 Leslie, 8 Andys, 3, 1 aprils Ron y 18 personas que no han especificado su nombre, la salida sería:

[('Leslie', 13), ('Andy', 8), ('abril', 3), ('ron', 1)]

el más cercano que puedo conseguir es de la siguiente manera:

q= Person.objects.all() 
q.query.group_by=['optional_first_name'] 
q.query.add_count_column() 
q.values_list('optional_first_name', flat= True) 

Pero todavía no es bastante lo que quiero.

Respuesta

10

Después de algo de investigación, finalmente se descubrió:

Person.objects.values('optional_first_name').annotate(c=Count('optional_first_name')).order_by('-c') 
+2

También puede ser que desee '.exclude (optional_first_name = '')' – okm

+0

cómo aplicar algunos filtros para esta consulta? como filtros solo nombres que comienzan con 'A' –

Cuestiones relacionadas