From c4982dd3b58b72c6058c84394a84645c29063260 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 22 Feb 2023 22:20:11 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BF=AE=E5=A4=8D=20role=20user=20seri?= =?UTF-8?q?alizer=20=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/rbac/api/role.py | 2 +- apps/users/api/user.py | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/apps/rbac/api/role.py b/apps/rbac/api/role.py index 3bccdc573..bb74f1b1c 100644 --- a/apps/rbac/api/role.py +++ b/apps/rbac/api/role.py @@ -72,7 +72,7 @@ class RoleViewSet(JMSModelViewSet): return queryset def get_serializer(self, *args, **kwargs): - if len(args) == 1: + if len(args) == 1 and kwargs.get('many', False): queryset = self.set_users_amount(args[0]) args = (queryset,) return super().get_serializer(*args, **kwargs) diff --git a/apps/users/api/user.py b/apps/users/api/user.py index c7f2d62eb..d1eee8083 100644 --- a/apps/users/api/user.py +++ b/apps/users/api/user.py @@ -51,17 +51,20 @@ class UserViewSet(CommonApiMixin, UserQuerysetMixin, SuggestionMixin, BulkModelV queryset = super().get_queryset().prefetch_related('groups') return queryset - def get_serializer(self, *args, **kwargs): - if len(args) == 0: - queryset = self.set_users_roles_for_cache(args[0]) - args = (queryset,) - return super().get_serializer(*args, **kwargs) - @action(methods=['get'], detail=False, url_path='suggestions') def match(self, request, *args, **kwargs): with tmp_to_root_org(): return super().match(request, *args, **kwargs) + def get_serializer(self, *args, **kwargs): + """重写 get_serializer,用于设置用户的角色缓存 + 放到 paginate_queryset 里面会导致 导出有问题, 因为导出的时候,没有 pager + """ + if len(args) == 1 and kwargs.get('many'): + queryset = self.set_users_roles_for_cache(args[0]) + args = (queryset,) + return super().get_serializer(*args, **kwargs) + @staticmethod def set_users_roles_for_cache(queryset): # Todo: 未来有机会用 SQL 实现