2010-06-14 7 views

Odpowiedz

11

Zakładam, że mówisz o metodzie zapytania query set raw(). To zwraca zestaw zapytań, jak każdy inny. Oczywiście można na nim zadzwonić pod numer .count(), podobnie jak w przypadku innych zapytań ORM.

Edytuj Pokazuje, co się dzieje, gdy nie sprawdzasz. Jak zauważasz, .raw() zwraca RawQuerySet, który nie ma metody liczenia - i nie obsługuje też len(). Jedynym sposobem, aby uzyskać długość jest iterację queryset i ich policzyć:

sum(1 for result in results) 
+0

próbowałem tego. Otrzymuję: Obiekt "RawQuerySet" nie ma atrybutu "count" – Galen

+0

i zorientowałem się, że nie było metody. Wielkie dzięki. – Galen

+0

zmusza to zapytanie do oceny nie? – Dejell

12

Można też rzucić go najpierw do listy, aby uzyskać długość, tak:

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

Jest potrzebne, jeśli chcesz mieć długość lub nawet istnienie wpisów w RawQuerySet w szablonach. Wystarczy wstępnie obliczyć długość jak powyżej i przekazać ją jako parametr do szablonu.

+3

To zmusza zapytanie do oceny nie? Jeśli chcesz tylko liczbę, jest to drogie. – SK9

+0

Jak @ SK9 powiedział: to jest droga droga. –

1

Hrabia Działa na RawQuerySet

 

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