django как получить количество статусов в одном словаре - PullRequest
2 голосов
/ 05 мая 2020

В моей таблице пользователей у меня много типов пользователей и статусов (ожидающих = 0,1 = одобрено). Я получаю счет примерно так.

     user = {}
     user['pending'] = User.objects.filter(type=3,status='0').count()
     user['approved'] = User.objects.filter(type=3,status='2').count()
     user['blocked'] = User.objects.filter(type=3,status='4').count()
     print(user)

Используя это, я получаю такой результат, как: {'ожидающий': 0, 'одобренный': 1, 'заблокированный': 0} что мне на самом деле нужно, так это то, что я хочу получить тот же результат с помощью одного запроса, может ли кто-нибудь помочь мне связать это? заранее спасибо

1 Ответ

2 голосов
/ 05 мая 2020

Можно использовать 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, а затем переименовываем ключи, чтобы получить желаемый словарь.

...