From 55d29d5763f22f136d2b4bae6464463acb514a5c Mon Sep 17 00:00:00 2001 From: starnakin Date: Thu, 25 Apr 2024 16:44:36 +0200 Subject: [PATCH] tournament: fix: serializer --- tournament/models.py | 2 +- tournament/serializers.py | 4 ++-- tournament/viewset.py | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tournament/models.py b/tournament/models.py index 42ce432..fd9199e 100644 --- a/tournament/models.py +++ b/tournament/models.py @@ -65,7 +65,7 @@ class TournamentModel(models.Model): return game def get_games(self) -> set[GameModel]: - return {games for games in self.get_games_by_round(i for i in range(1, self.round))} + return [{games for games in self.get_games_by_round(i)} for i in range(1, self.round)] def get_games_by_round(self, round: int) -> set[GameModel]: return {tournament_game for tournament_game in TournamentGameModel.objects.filter(tournament=self, round=round)} diff --git a/tournament/serializers.py b/tournament/serializers.py index d5c8de9..cb84e87 100644 --- a/tournament/serializers.py +++ b/tournament/serializers.py @@ -5,7 +5,7 @@ from .models import TournamentModel, TournamentGameModel from profiles.serializers import ProfileSerializer from games.serializers import GameSerializer -nb_participants = [2 ** i for i in range(2, 6)] +nb_participants = [2 ** i for i in range(1, 6)] class TournamentSerializer(serializers.ModelSerializer): @@ -25,7 +25,7 @@ class TournamentSerializer(serializers.ModelSerializer): return ProfileSerializer(instance.get_participants(), many=True).data def get_games(self, instance: TournamentModel): - return GameSerializer(instance.get_games(), many=True).data + return [GameSerializer(games, many=True).data for games in instance.get_games()] def get_state(self, instance: TournamentModel): return ["waiting", "started", "finished"][instance.started + instance.finished] diff --git a/tournament/viewset.py b/tournament/viewset.py index dcec5a4..a2957bb 100644 --- a/tournament/viewset.py +++ b/tournament/viewset.py @@ -10,6 +10,8 @@ from django.db.models import QuerySet from .models import TournamentModel from .serializers import TournamentSerializer +import math + # Create your views here. class TournamentViewSet(viewsets.ModelViewSet): @@ -19,7 +21,7 @@ class TournamentViewSet(viewsets.ModelViewSet): authentication_classes = (SessionAuthentication,) def perform_create(self, serializer: TournamentSerializer): - tournament = serializer.save(round=1) + tournament = serializer.save(round=math.log2(serializer.validated_data['nb_participants']) + 1) return Response(self.serializer_class(tournament).data, status=status.HTTP_201_CREATED)