refactor: user filter

This commit is contained in:
wxg0103 2025-06-25 18:38:35 +08:00
parent 6cdd8ffe39
commit a26c4320dd
2 changed files with 28 additions and 9 deletions

View File

@ -177,16 +177,35 @@ class UserManageSerializer(serializers.Serializer):
raise ExceptionCodeConstants.NICKNAME_IS_EXIST.value.to_app_api_exception()
class Query(serializers.Serializer):
email_or_username = serializers.CharField(required=False, allow_null=True,
label=_('Email or username'))
username = serializers.CharField(
required=False,
label=_("Username"),
max_length=20,
allow_blank=True
)
nick_name = serializers.CharField(
required=False,
label=_("Nick Name"),
max_length=20,
allow_blank=True
)
email = serializers.CharField(
required=False,
label=_("Email"),
allow_blank=True,
)
def get_query_set(self):
email_or_username = self.data.get('email_or_username')
username = self.data.get('username')
nick_name = self.data.get('nick_name')
email = self.data.get('email')
query_set = QuerySet(User)
if email_or_username is not None:
query_set = query_set.filter(
Q(username__contains=email_or_username) | Q(email__contains=email_or_username) | Q(
nick_name__contains=email_or_username))
if username is not None:
query_set = query_set.filter(username__contains=username)
if nick_name is not None:
query_set = query_set.filter(nick_name__contains=nick_name)
if email is not None:
query_set = query_set.filter(email__contains=email)
query_set = query_set.order_by("-create_time")
return query_set

View File

@ -19,6 +19,7 @@ from common.constants.cache_version import Cache_Version
from common.constants.permission_constants import PermissionConstants, Permission, Group, Operate, RoleConstants
from common.log.log import log
from common.result import result
from common.utils.common import query_params_to_single_dict
from maxkb.const import CONFIG
from models_provider.api.model import DefaultModelResponse
from tools.serializers.tool import encryption
@ -274,8 +275,7 @@ class UserManage(APIView):
@has_permissions(PermissionConstants.USER_READ, RoleConstants.ADMIN)
def get(self, request: Request, current_page, page_size):
d = UserManageSerializer.Query(
data={'email_or_username': request.query_params.get('email_or_username', None),
'user_id': str(request.user.id)})
data={**query_params_to_single_dict(request.query_params)})
return result.success(d.page(current_page, page_size))