Подсчитайте, сколько раз значение появляется в таблице

В моем приложении есть несколько форм, которые позволяют пользователю выбирать из выпадающего списка, и я пытаюсь подсчитать, сколько раз RED, GREEN и AMBER были выбраны в 20 различных полях.

Я смотрел на

from django.db.models import Count
queryset = MyModel.objects.all().annotate(count = Count('my_charfield'))

Но я не уверен, как считать значения, а не тип поля?

Спасибо

Вы можете использовать условную агрегацию. Что-то в этом роде:

MyModel.objects.aggregate(
     red=Sum(
         Case(When(my_charfield="RED", then=1),
              output_field=IntegerField())
     ),
     green=Sum(
         Case(When(my_charfield="GREEN", then=1),
              output_field=IntegerField())
     ),
     amber=Sum(
         Case(When(account_type="AMBER", then=1),
              output_field=IntegerField())
     )
)

который затем вернет словарь значений

{red: 1, green: 10, amber: 101}
Вернуться на верх