Как подсчитать все объекты в наборе запросов, связанные со значением определенного поля?
У меня есть модель 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
.