Можно использовать Count
агрегирование .
from django.db.models import Count
result = User.objects.filter(type=3, status__in=[0, 2, 4]).values('status')
.order_by('status')
.annotate(count=Count('status'))
# create dict
result_dict = {r.status : r.count for r in result}
# rename keys of dict
new_keys= {'0':'pending', '2':'approved', '4':'blocked'}
result_with_new_keys = {new_keys[key] : value for key, value in result.items()}
result
будет QuerySet
с полями status
и count
.
Затем мы создаем dict
из QuerySet
, а затем переименовываем ключи, чтобы получить желаемый словарь.