From 77a22dae1597a64032aca57aaf9eba8091257364 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 8 May 2024 09:32:36 +0200 Subject: [PATCH] Fixes failing user update --- tournaments/models/custom_user.py | 7 +++++++ tournaments/serializers.py | 5 +++++ tournaments/views.py | 10 ++++++++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/tournaments/models/custom_user.py b/tournaments/models/custom_user.py index e2477f8..7e053c4 100644 --- a/tournaments/models/custom_user.py +++ b/tournaments/models/custom_user.py @@ -28,5 +28,12 @@ class CustomUser(AbstractUser): group_stage_match_format_preference = models.IntegerField(default=enums.FederalMatchCategory.NINE_GAMES, choices=enums.FederalMatchCategory.choices, null=True, blank=True) loser_bracket_match_format_preference = models.IntegerField(default=enums.FederalMatchCategory.NINE_GAMES, choices=enums.FederalMatchCategory.choices, null=True, blank=True) + def fields_for_update(): + # returns the list of fields to update without password + return ['id', 'username', 'email', 'umpire_code', 'clubs', 'phone', 'first_name', 'last_name', 'licence_id', 'country', + 'call_message_body', 'call_message_signature', 'call_display_format', 'call_display_entry_fee', + 'call_use_full_custom_message', 'match_formats_default_duration', 'bracket_match_format_preference', + 'group_stage_match_format_preference', 'loser_bracket_match_format_preference'] + def __str__(self): return self.username diff --git a/tournaments/serializers.py b/tournaments/serializers.py index e83e09a..f11aba4 100644 --- a/tournaments/serializers.py +++ b/tournaments/serializers.py @@ -75,6 +75,11 @@ class UserSerializer(serializers.ModelSerializer): model = CustomUser fields = '__all__' # ['id', 'username', 'password', 'umpire_code', 'clubs', 'phone', 'first_name', 'last_name', 'licence_id'] +class UserUpdateSerializer(serializers.ModelSerializer): + class Meta: + model = CustomUser + fields = CustomUser.fields_for_update() + class ClubSerializer(serializers.ModelSerializer): class Meta: model = Club diff --git a/tournaments/views.py b/tournaments/views.py index abebd2c..6e5f683 100644 --- a/tournaments/views.py +++ b/tournaments/views.py @@ -9,7 +9,7 @@ from tournaments.models.date_interval import DateInterval from .tokens import account_activation_token from tournaments.models import group_stage -from .serializers import ClubSerializer, CourtSerializer, DateIntervalSerializer, TournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamScoreSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer, LiveMatchSerializer, PurchaseSerializer +from .serializers import ClubSerializer, CourtSerializer, DateIntervalSerializer, TournamentSerializer, UserSerializer, ChangePasswordSerializer, EventSerializer, RoundSerializer, GroupStageSerializer, MatchSerializer, TeamScoreSerializer, TeamRegistrationSerializer, PlayerRegistrationSerializer, LiveMatchSerializer, PurchaseSerializer, UserUpdateSerializer from .models import Club, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamScore, TeamRegistration, PlayerRegistration, Purchase from .models import TeamSummon from datetime import datetime @@ -218,7 +218,13 @@ def user_by_token(request): class UserViewSet(viewsets.ModelViewSet): queryset = CustomUser.objects.all() - serializer_class = UserSerializer + serializer_class = UserUpdateSerializer + + def get_serializer_class(self): + # Use UserSerializer for other actions (e.g., create, retrieve) + if self.action in ['create', 'retrieve']: + return UserSerializer + return self.serializer_class class ClubViewSet(viewsets.ModelViewSet): queryset = Club.objects.all()