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, а не на основе значений базы данных?

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