Как я могу получить общее количество объектов, возвращенных в 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() не требует больших ресурсов, поэтому если вам нужно иметь и агрегированный набор запросов, и подсчет, просто сделайте два запроса к базе данных, один для подсчета, а другой для агрегированного набора запросов.