Как подсчитать все объекты в наборе запросов, связанные со значением определенного поля?

У меня есть модель Poller, в которой есть поле category. У меня есть отфильтрованный набор запросов Poller. Теперь я хочу подсчитать объекты для каждой категории следующим образом:

Poller 1: poller_category - Sport
Poller 2: poller_category - Sport
Poller 3: poller_category - Tech
Poller 4: poller_category - Tech
Poller 5: poller_category - Fashion

должен возвращать словарь, несколько похожий на counts = {'Sport' : '2', 'Tech' : '2', 'Fashion' : '1'}

# Model

class Poller(models.Model):

    poller_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    poller_category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True)
    created_by = models.ForeignKey(Account, on_delete=models.CASCADE)


class Category(models.Model):
    """
    Model to define categories and their color styles
    """
    poller_category = models.CharField(max_length=30)
    category_color = models.CharField(max_length=15, blank=True)
# View / query

    qs = Poller.objects.filter(
        created_by__username=username).order_by(
        '-poller_category')

Не уверен, но сам порядок может быть устаревшим, вероятно.

Вы можете указать для каждого name Category, Count количество элементов:

from django.db.models import Count, Q

Category.objects.annotate(
     numpollers=Count('poller', filter=Q(poller__created_by__username=username))
)

Здесь Category объекты, возникающие из этого кверисета, будут иметь дополнительный атрибут .numpollers с количеством Poller объектов, где created_by__username установлено значение username.

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