mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-08-16 21:28:11 +00:00
* perf: initial * perf: basic finished * perf: depend * perf: Update Dockerfile with new base image tag * perf: Add user report api * perf: Update Dockerfile with new base image tag * perf: Use user report api * perf: Update Dockerfile with new base image tag * perf: user login report * perf: Update Dockerfile with new base image tag * perf: user change password * perf: change password dashboard * perf: Update Dockerfile with new base image tag * perf: Translate * perf: asset api * perf: asset activity * perf: Asset report * perf: add charts_map * perf: account report * perf: Translate * perf: account automation * perf: Account automation * perf: title * perf: Update Dockerfile with new base image tag --------- Co-authored-by: ibuler <ibuler@qq.com> Co-authored-by: feng <1304903146@qq.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: wangruidong <940853815@qq.com> Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
22 lines
490 B
Python
22 lines
490 B
Python
from django.db.models import Count, F
|
|
|
|
|
|
def group_stats(queryset, alias, key, label_map=None):
|
|
grouped = (
|
|
queryset
|
|
.exclude(**{f'{key}__isnull': True})
|
|
.values(**{alias: F(key)})
|
|
.annotate(total=Count('id'))
|
|
)
|
|
|
|
data = [
|
|
{
|
|
alias: val,
|
|
'total': cnt,
|
|
**({'label': label_map.get(val, val)} if label_map else {})
|
|
}
|
|
for val, cnt in grouped.values_list(alias, 'total')
|
|
]
|
|
|
|
return data
|