Django annotate Count over queryset results
Представим следующую модель:
class Product(models.Model):
name = models.CharField(max_lenght=255)
category = models.ForeignKey(Category, ...)
type = models.ForeignKey(Type, ...)
platform = models.ForeignKey(Platform, ...)
[...]
Пользователи могут фильтровать по каждому полю ForeignKey__id, а отфильтрованный набор запросов используется для построения динамического фильтра для фронтенда со следующей структурой:
"filter": {
"categories": [
{
"category__id": 1,
"category__name": "videogames",
"total": 12
},
{
"category__id": 2,
"category__name": "funkos",
"total": 3
}
],
"types": [
{
"type__id": 3,
"type__name": "accessory",
"total": 2
},
{
"type__id": 2,
"type__name": "console",
"total": 4
}
]
}
Где total - количество Продуктов, относящихся к каждой категории, типу и т.д.. Значения вычисляются следующим образом:
categories = queryset.values('category__id', 'category__name').annotate(total=Count('id'))
queryset также может быть отфильтрован, например, по товарам с ценой более 25.00$.
Есть ли способ получить значение поля total (в настоящее время annotate(total=Count('id'))) на основе значений queryset, а не на основе значений базы данных?