88from backend .signals import team_create
99from challenge .serializers import SolveSerializer
1010from member .serializers import MinimalMemberSerializer
11- from team .models import Team
11+ from team .models import Team , LeaderboardGroup
1212
1313
1414class SelfTeamSerializer (IncorrectSolvesMixin , serializers .ModelSerializer ):
@@ -30,8 +30,9 @@ class Meta:
3030 "incorrect_solves" ,
3131 "points" ,
3232 "leaderboard_points" ,
33+ "leaderboard_group"
3334 ]
34- read_only_fields = ["id" , "is_visible" , "incorrect_solves" ]
35+ read_only_fields = ["id" , "is_visible" , "incorrect_solves" , "leaderboard_group" ]
3536
3637
3738class TeamSerializer (IncorrectSolvesMixin , serializers .ModelSerializer ):
@@ -52,6 +53,7 @@ class Meta:
5253 "incorrect_solves" ,
5354 "points" ,
5455 "leaderboard_points" ,
56+ "leaderboard_group"
5557 ]
5658
5759 def get_incorrect_solves (self , instance ):
@@ -63,7 +65,13 @@ class ListTeamSerializer(serializers.ModelSerializer):
6365
6466 class Meta :
6567 model = Team
66- fields = ["id" , "name" , "members" ]
68+ fields = ["id" , "name" , "members" , "leaderboard_group" ]
69+
70+
71+ class LeaderboardGroupSerializer (serializers .ModelSerializer ):
72+ class Meta :
73+ model = LeaderboardGroup
74+ fields = ["id" , "name" , "description" , "is_self_assignable" , "has_own_leaderboard" ]
6775
6876
6977class AdminTeamSerializer (IncorrectSolvesMixin , serializers .ModelSerializer ):
@@ -86,6 +94,7 @@ class Meta:
8694 "size_limit_exempt" ,
8795 "points" ,
8896 "leaderboard_points" ,
97+ "leaderboard_group"
8998 ]
9099
91100
@@ -98,18 +107,25 @@ class Meta:
98107class CreateTeamSerializer (serializers .ModelSerializer ):
99108 class Meta :
100109 model = Team
101- fields = ["id" , "is_visible" , "name" , "owner" , "password" ]
110+ fields = ["id" , "is_visible" , "name" , "owner" , "password" , "leaderboard_group" ]
102111 read_only_fields = ["id" , "is_visible" , "owner" ]
103112
104113 def create (self , validated_data ):
105114 try :
106115 name = validated_data ["name" ]
107116 password = validated_data ["password" ]
117+ leaderboard_group = validated_data .get ("leaderboard_group" , None )
118+
119+ if leaderboard_group is not None and not leaderboard_group .is_self_assignable :
120+ raise ValidationError ("illegal_leaderboard_group" )
121+
108122 team = Team .objects .create (
109123 name = name ,
110124 password = password ,
111125 owner = self .context ["request" ].user ,
126+ leaderboard_group = leaderboard_group
112127 )
128+
113129 self .context ["request" ].user .team = team
114130 self .context ["request" ].user .save ()
115131 team_create .send (sender = self .__class__ , team = team )
0 commit comments