django 如何在单个字典中获取状态计数

django how to get status count in single dictionary

In my user table i have many user type and status (pending = 0,1 = approved). i am getting the count like.

     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)

Using this i am getting result in this way like : {'pending': 0, 'approved': 1, 'blocked': 0} what actually i need is i want this same result through a single query can any one please help me related this ?? thanks in advance

你可以use Count aggregation.

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 将是具有 statuscount 字段的 QuerySet

然后,我们从 QuerySet 创建一个 dict,然后我们重命名键以获得所需的字典。