Как я могу получить общее количество объектов, возвращенных в Django queryset в рамках моей агрегации?

Если у меня есть модель:

class Book(models.Model):
    name = models.CharField(max_length=100)
    ...

И я делаю запрос:

Book.objects.filter(name__icontains="The").aggregate(number_of_books=Count("*"), ...)

Здесь я фильтрую книги, чтобы вернуть только те, которые содержат подстроку The, и делаю агрегацию. Я хочу, чтобы результирующий dict сообщил мне, помимо прочего, сколько элементов было в моем наборе запросов. Это должно быть то же самое, как если бы я сделал Book.objects.filter(name__icontainers="The").count().

Что даст мне общее количество элементов (книг) в моем наборе запросов? Count("*") это просто предположение, но, похоже, оно работает. Это правильно?

Простите, поправьте меня, если я ошибаюсь, или если вы делаете здесь что-то лишнее, но можно просто:

 Book.objects.filter(name__icontains="The").count()

Возвращает целое число, которое является длиной набора запросов, который вы отфильтровали.

.count() не требует больших ресурсов, поэтому если вам нужно иметь и агрегированный набор запросов, и подсчет, просто сделайте два запроса к базе данных, один для подсчета, а другой для агрегированного набора запросов.

Вернуться на верх