Получить количество результатов из функции запроса Django raw () - PullRequest
7 голосов
/ 14 июня 2010

Я использую необработанный запрос, и мне не удается выяснить, как получить количество результатов, которые он возвращает. Есть ли способ?

редактировать

.count () не работает. он возвращает: объект 'RawQuerySet' не имеет атрибута 'count'

Ответы [ 3 ]

13 голосов
/ 27 июля 2011

Вы также можете сначала привести его к списку, чтобы получить длину, например:

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

Это необходимо, если вы хотите иметь длину или даже наличие записей в RawQuerySet в шаблонах. Просто рассчитайте длину, как указано выше, и передайте ее в качестве параметра в шаблон.

11 голосов
/ 14 июня 2010

Полагаю, вы говорите о методе raw() queryset.Это возвращает набор запросов, как и любой другой.Поэтому, конечно, вы можете вызвать .count(), как и любой другой запрос ORM.

Редактировать Показывает, что происходит, когда вы не проверяете.Как вы заметили, .raw() возвращает RawQuerySet, у которого нет метода подсчета - и при этом он не поддерживает len().Единственный способ получить длину - это перебрать набор запросов и посчитать их:

sum(1 for result in results)
1 голос
/ 03 февраля 2017

Count Работает на RawQuerySet


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

...