2010-07-30 17 views
18

¿Alguien sabe si hay una manera de simplemente seleccionar el número de filas que coinciden con una consulta en Django? Tengo una búsqueda que he escrito que divide los resultados en conjuntos de 40, pero me gustaría mostrar el número total de resultados también. Podría hacer algo como len (Model.objects.filter (name__icontains = search)), pero parece que sería extremadamente ineficiente (ya que supongo que generaría un modelo "SELECT * FROM" y luego todos los resultados objetos). ¿Alguna sugerencia?Seleccione un COUNT con el modelo Django?

Respuesta

30

Hay dos formas principales de manejar esta situación:

  1. Use Django's count() QuerySet method - simplemente añada count() al final de la adecuada QuerySet
  2. generar un aggregate over the QuerySet - Agregación es cuando "recuperas valores que se derivan resumiendo o agregando una colección de objetos". Ref: Django Aggregation Documentation

Los enlaces de arriba corresponden a las secciones aplicables de la documentación de Django.

+0

Gracias, agregado hizo el truco. Es un poco extraño; Tuve que hacer un agregado (Count ('id')). Count() (¿contar mi conteo?). Sin embargo, estoy feliz siempre y cuando, con suerte, solo obtenga un número y no todos los datos en la tabla. – Andrew

30

Uso count():

>>> Model.objects.count() 
42 
>>> Model.related_set.count() 
102 
>>> Model.related_set.filter(blah=42).count() 
3 
Cuestiones relacionadas