From 10ecb79152666a84a00bcc4606c84b98f4ca0472 Mon Sep 17 00:00:00 2001 From: zema1 Date: Sun, 10 Dec 2017 09:58:08 +0800 Subject: [PATCH] fix admin update user real_name problem --- account/serializers.py | 9 +++++++++ account/views/admin.py | 2 ++ account/views/oj.py | 7 +++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/account/serializers.py b/account/serializers.py index bd252c7..fe54862 100644 --- a/account/serializers.py +++ b/account/serializers.py @@ -69,15 +69,24 @@ class UserSerializer(serializers.ModelSerializer): class UserProfileSerializer(serializers.ModelSerializer): user = UserSerializer() + real_name = serializers.SerializerMethodField() class Meta: model = UserProfile fields = "__all__" + def __init__(self, *args, **kwargs): + self.show_real_name = kwargs.pop("show_real_name", False) + super(UserProfileSerializer, self).__init__(*args, **kwargs) + + def get_real_name(self, obj): + return obj.real_name if self.show_real_name else None + class EditUserSerializer(serializers.Serializer): id = serializers.IntegerField() username = serializers.CharField(max_length=32) + real_name = serializers.CharField(max_length=32, allow_blank=True) password = serializers.CharField(min_length=6, allow_blank=True, required=False, default=None) email = serializers.EmailField(max_length=64) admin_type = serializers.ChoiceField(choices=(AdminType.REGULAR_USER, AdminType.ADMIN, AdminType.SUPER_ADMIN)) diff --git a/account/views/admin.py b/account/views/admin.py index aa1062c..7585227 100644 --- a/account/views/admin.py +++ b/account/views/admin.py @@ -95,6 +95,8 @@ class UserAdminAPI(APIView): user.save() if pre_username != user.username: Submission.objects.filter(username=pre_username).update(username=user.username) + + UserProfile.objects.filter(user=user).update(real_name=data["real_name"]) return self.success(UserAdminSerializer(user).data) @super_admin_required diff --git a/account/views/oj.py b/account/views/oj.py index 321e93f..bc8c9cf 100644 --- a/account/views/oj.py +++ b/account/views/oj.py @@ -37,15 +37,18 @@ class UserProfileAPI(APIView): user = request.user if not user.is_authenticated(): return self.success() + show_real_name = False username = request.GET.get("username") try: if username: user = User.objects.get(username=username, is_disabled=False) else: user = request.user + # api返回的是自己的信息,可以返real_name + show_real_name = True except User.DoesNotExist: return self.error("User does not exist") - return self.success(UserProfileSerializer(user.userprofile).data) + return self.success(UserProfileSerializer(user.userprofile, show_real_name=show_real_name).data) @validate_serializer(EditUserProfileSerializer) @login_required @@ -55,7 +58,7 @@ class UserProfileAPI(APIView): for k, v in data.items(): setattr(user_profile, k, v) user_profile.save() - return self.success(UserProfileSerializer(user_profile).data) + return self.success(UserProfileSerializer(user_profile, show_real_name=True).data) class AvatarUploadAPI(APIView):