From b2565c8b51b703378c1b0171a5683f88faf22a1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Stani=C3=B3w?= Date: Mon, 25 Dec 2017 19:31:02 +0100 Subject: [PATCH] feat(Admin): Allow admins updating others profiles --- api/serializers.py | 33 +++++++++++++++++++++++---------- api/views.py | 20 -------------------- 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/api/serializers.py b/api/serializers.py index f0949bf..c94da75 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -26,11 +26,32 @@ class MemberSerializer(serializers.ModelSerializer): def_ratio = serializers.SerializerMethodField() win_ratio = serializers.SerializerMethodField() email = serializers.CharField(source='player.email', read_only=True) - first_name = serializers.CharField(source='player.first_name', read_only=True) - last_name = serializers.CharField(source='player.last_name', read_only=True) + first_name = serializers.CharField(source='player.first_name') + last_name = serializers.CharField(source='player.last_name') whats_new_version = serializers.IntegerField(source='player.whats_new_version', read_only=True) user_id = serializers.IntegerField(source='player.pk', read_only=True) + class Meta: + model = Member + fields = ( + 'id', 'username', 'email', 'first_name', 'last_name', 'exp', 'played', 'att_ratio', 'def_ratio', + 'win_ratio', 'win_streak', 'lose_streak', 'curr_lose_streak', 'curr_win_streak', 'lowest_exp', + 'highest_exp', 'exp_history', 'is_accepted', 'hidden', 'whats_new_version', 'user_id', 'is_team_admin', + ) + + def create(self, validated_data): + validated_data.pop('first_name') + validated_data.pop('last_name') + return super(MemberSerializer, self).create(validated_data) + + def update(self, instance, validated_data): + print(validated_data) + player_data = validated_data.pop('player', None) + updated = super(MemberSerializer, self).update(instance, validated_data) + if player_data: + Player.objects.filter(id=updated.player.id).update(**player_data) + return updated + def get_att_ratio(self, obj): return obj.att_ratio @@ -47,14 +68,6 @@ def get_exp_history(self, obj): .annotate(amount=F('matches_played'))\ .order_by('date') - class Meta: - model = Member - fields = ( - 'id', 'username', 'email', 'first_name', 'last_name', 'exp', 'played', 'att_ratio', 'def_ratio', - 'win_ratio', 'win_streak', 'lose_streak', 'curr_lose_streak', 'curr_win_streak', 'lowest_exp', - 'highest_exp', 'exp_history', 'is_accepted', 'hidden', 'whats_new_version', 'user_id', 'is_team_admin', - ) - class MatchSerializer(serializers.ModelSerializer): red_att = serializers.SlugRelatedField(slug_field='username', queryset=Member.objects.all()) diff --git a/api/views.py b/api/views.py index 48d5654..e48e80f 100644 --- a/api/views.py +++ b/api/views.py @@ -155,26 +155,6 @@ def invite(self, request, pk=None): status=status.HTTP_201_CREATED ) - @detail_route(methods=['post'], permission_classes=[IsAdmin]) - def assign_admin(self, request, pk=None): - team = Team.objects.get(pk=pk) - username = request.data.get('username') - if not team or not username: - return Response(displayable('Incorrect request'), status=status.HTTP_400_BAD_REQUEST) - try: - member = team.member_set.get(username=username) - except Member.DoesNotExist: - return Response( - displayable(f'Unable to make {username} admin'), - status=status.HTTP_400_BAD_REQUEST - ) - member.is_team_admin = True - member.save() - return Response( - displayable(f'Successfully granted {username} admin privileges'), - status=status.HTTP_200_OK - ) - class MemberViewSet(NestedViewSetMixin, ModelViewSet): serializer_class = MemberSerializer