【问题标题】:django how to get status count in single dictionarydjango 如何在单个字典中获取状态计数
【发布时间】:2020-08-19 19:11:09
【问题描述】:

在我的用户表中,我有许多用户类型和状态(待定 = 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} 实际上我需要的是我希望通过一个查询获得相同的结果,任何人都可以帮我解决这个问题吗?提前致谢

【问题讨论】:

  • 有什么相关的建议吗??

标签: python django python-3.x django-admin


【解决方案1】:

你可以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,然后我们重命名键以获得所需的字典。

【讨论】:

  • 嗨@narendra 通过这个我得到了类似的结果: 但我想要像 pendingcount = 0,approvedcount=1 这样的结果这边
  • @Himani 请检查更新的答案。添加了替换键的代码。
  • 我试过了 --- result = User.objects.filter(type=3, status__in=[0, 2, 4]).values('status').order_by('status') .annotate(count=Count('status')) new_keys= {'0':'pending', '2':'approved', '4':'blocked'} result_with_new_keys = {new_keys[key] : 键值, result.items()} print(result_with_new_keys) 中的值,但它返回错误:AttributeError: 'QuerySet' object has no attribute 'items'
  • @Himani 我的错,没有意识到添加 filter 将返回 Queryset,而不是 dict
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 2021-01-24
相关资源
最近更新 更多