diff --git a/apps/users/serializers/user_group.py b/apps/users/serializers/user_group.py index 197de7455b3..50f6573d821 100644 --- a/apps/users/serializers/user_group.py +++ b/apps/users/serializers/user_group.py @@ -2,7 +2,8 @@ import uuid_utils.compat as uuid from django.db import transaction -from django.db.models import Count +from django.db.models import Count, OuterRef, Subquery +from django.db.models.functions import Coalesce from django.utils.translation import gettext_lazy as _ from rest_framework import serializers @@ -36,7 +37,6 @@ class Meta: fields = ['id', 'name', 'workspace_id'] - class SystemUserGroupCreateSerializer(serializers.Serializer): id = serializers.CharField(required=False, label='ID') name = serializers.CharField(required=True, label='User Group Name') @@ -105,16 +105,24 @@ class UserGroupListSerializer(serializers.ModelSerializer): workspace_id = serializers.CharField(required=True, label='Workspace ID') def get_user_groups(self, workspace_id: str): - - groups = ( + return list( SystemUserGroup.objects .filter(workspace_id=workspace_id) .annotate( - count=Count("systemusergrouprelation_set__user", distinct=True) + count=Coalesce( + Subquery( + SystemUserGroupRelation.objects + .filter(group_id=OuterRef('id')) + .values('group_id') + .annotate(cnt=Count('id')) + .values('cnt') + ), + 0 + ) ) .order_by("name") + .values("id", "name", "workspace_id", "count") ) - return SystemUserGroupModelSerializer(groups, many=True).data class UserGroupAddMemberSerializer(serializers.Serializer): diff --git a/apps/users/views/system_user_group.py b/apps/users/views/system_user_group.py index 5b47efd0868..f9b49322fdc 100644 --- a/apps/users/views/system_user_group.py +++ b/apps/users/views/system_user_group.py @@ -1,7 +1,6 @@ # coding=utf-8 from django.utils.translation import gettext_lazy as _ -from django.db.models import Count from drf_spectacular.utils import extend_schema from rest_framework.request import Request from rest_framework.views import APIView @@ -21,7 +20,7 @@ SystemUserGroupCreateSerializer, UserGroupAddMemberSerializer, UserGroupRemoveMemberSerializer, - UserGroupListPageSerializer, SystemUserGroupModelSerializer + UserGroupListPageSerializer )