2010-06-14 5 views

Répondre

11

Je suppose que vous parlez de la méthode de jeu de queues raw(). Cela renvoie un jeu de questions comme n'importe quel autre. Donc, bien sûr, vous pouvez appeler le .count(), comme vous le feriez pour n'importe quelle autre requête ORM.

Édition Affiche ce qui se passe lorsque vous ne vérifiez pas. Comme vous le notez, .raw() renvoie un RawQuerySet qui n'a pas une méthode de comptage - et ne prend pas en charge len(). La seule façon d'obtenir la longueur est de parcourir le queryset et les compter:

sum(1 for result in results) 
+0

j'ai essayé cela. Je reçois: objet 'RawQuerySet' n'a pas d'attribut 'count' – Galen

+0

je me suis dit qu'il n'y avait pas une méthode. Merci beaucoup. – Galen

+0

cela force la requête à être évaluée non? – Dejell

12

Vous pouvez également jeter d'abord à une liste pour obtenir la longueur, comme suit:

results = ModelName.objects.raw("select * from modelnames_modelname") 
len(list(results)) #returns length 

C'est nécessaire si vous voulez avoir la longueur ou même l'existence d'entrées dans le RawQuerySet dans les modèles aussi bien. Juste précalculer la longueur comme ci-dessus, et passez-le comme un paramètre au modèle.

+3

Cela force la requête à être évaluée non? Si vous voulez seulement le compte, c'est cher. – SK9

+0

Comme l'a dit @ SK9: c'est très cher. –

1

comte Travaux sur RawQuerySet

 

ModelName.objects.raw("select 1 as id , COUNT(*) from modelnames_modelname")