perf: 修复 role user serializer 问题

pull/9707/head
ibuler 2023-02-22 22:20:11 +08:00
parent 58341a9e85
commit c4982dd3b5
2 changed files with 10 additions and 7 deletions

View File

@ -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)

View File

@ -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 实现