2010-07-30 4 views
18

Est-ce que quelqu'un sait s'il existe un moyen de simplement sélectionner le nombre de lignes correspondant à une requête dans Django? J'ai une recherche que j'ai écrite qui divise les résultats en ensembles de 40, mais j'aimerais aussi afficher le nombre total de résultats. Je pourrais quelque chose comme len (Model.objects.filter (name__icontains = search)), mais il semblerait que ce serait très inefficace (puisque je suppose que cela générerait un "SELECT * FROM modèle", puis tous les résultants objets). Aucune suggestion?Sélectionnez un COUNT en utilisant le modèle Django?

Répondre

30

Il y a deux façons de faire cela:

  1. Utilisez Django's count() QuerySet method - simplement ajouter count() à la fin de la appropriée QuerySet
  2. Générez un aggregate over the QuerySet - L'agrégation est lorsque vous "récupérez les valeurs qui sont dérivées en résumant ou agrégeant une collection d'objets." Ref: Django Aggregation Documentation

Les liens ci-dessus correspondent aux sections applicables de la documentation de Django.

+0

Merci, l'agrégat a fait l'affaire. C'est plutôt étrange. Je devais faire un agrégat (Count ('id')). Count() (compter mon compte?). Je suis heureux, cependant, tant que ce n'est que j'espère tirer seulement un certain nombre et pas toutes les données dans le tableau. – Andrew

30

Utilisation count():

>>> Model.objects.count() 
42 
>>> Model.related_set.count() 
102 
>>> Model.related_set.filter(blah=42).count() 
3 
Questions connexes