From 9d0c50c1fac2849d941fd1a18f43e3c49f249512 Mon Sep 17 00:00:00 2001 From: sina_sajjadi Date: Mon, 25 May 2026 16:51:22 +0330 Subject: [PATCH] enhance admine panel user serializers and views , adding more detailed fields --- apps/account/serializers/user.py | 17 ++++++++++++----- apps/account/views/user.py | 7 ++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/apps/account/serializers/user.py b/apps/account/serializers/user.py index cfc884f..f8187b7 100644 --- a/apps/account/serializers/user.py +++ b/apps/account/serializers/user.py @@ -9,7 +9,7 @@ from utils.validators import validate_type_code class UserProfileSerializer(serializers.ModelSerializer): - avatar = FileFieldSerializer(required=False) + avatar = FileFieldSerializer(required=False, allow_null=True) password = serializers.CharField(write_only=True, required=False, validators=[validate_password]) fullname = serializers.CharField(required=False) gender = serializers.ChoiceField( @@ -223,18 +223,25 @@ class UserFCMSerializer(serializers.ModelSerializer): class AdminUserSerializer(serializers.ModelSerializer): - avatar = FileFieldSerializer(required=False) + avatar = FileFieldSerializer(required=False, allow_null=True) password = serializers.CharField(write_only=True, required=False, validators=[validate_password]) email = serializers.EmailField(required=True) + auth_token = serializers.SerializerMethodField() + + def get_auth_token(self, obj): + token = Token.objects.filter(user=obj).first() + return token.key if token else None class Meta: model = User fields = [ 'id', 'fullname', 'email', 'phone_number', 'password', 'avatar', - 'gender', 'user_type', 'is_active', 'is_staff', 'is_superuser', - 'date_joined', 'last_login' + 'gender', 'birthdate', 'info', 'skill', 'city', 'country', + 'device_id', 'device_os', 'user_agent', 'client_ip', 'fcm', + 'user_type', 'is_active', 'is_staff', 'is_superuser', + 'date_joined', 'last_login', 'auth_token' ] - read_only_fields = ['id', 'date_joined', 'last_login'] + read_only_fields = ['id', 'date_joined', 'last_login', 'auth_token', 'device_id', 'device_os', 'user_agent', 'client_ip'] def create(self, validated_data): password = validated_data.pop('password', None) diff --git a/apps/account/views/user.py b/apps/account/views/user.py index 2d3535d..ba381fb 100644 --- a/apps/account/views/user.py +++ b/apps/account/views/user.py @@ -662,6 +662,11 @@ class AdminUserViewSet(ModelViewSet): if gender_param: queryset = queryset.filter(gender=gender_param) + # Handle user type filter + user_type_param = self.request.query_params.get('user_type', None) + if user_type_param: + queryset = queryset.filter(user_type=user_type_param) + # Handle Ordering ordering_param = self.request.query_params.get('ordering', '-date_joined') allowed_orderings = [ @@ -674,4 +679,4 @@ class AdminUserViewSet(ModelViewSet): else: queryset = queryset.order_by('-date_joined') - return queryset.distinct() \ No newline at end of file + return queryset.distinct()