From 0650ebd77f9947688bbfd13c621469172b56fd34 Mon Sep 17 00:00:00 2001 From: Raz Date: Tue, 13 May 2025 15:20:15 +0200 Subject: [PATCH] add unique_random_index in team --- ...23_teamregistration_unique_random_index.py | 18 ++++++++++++++++ tournaments/models/team_registration.py | 1 + tournaments/models/tournament.py | 21 +++++++++++-------- .../tournaments/broadcast/broadcast_club.html | 2 +- 4 files changed, 32 insertions(+), 10 deletions(-) create mode 100644 tournaments/migrations/0123_teamregistration_unique_random_index.py diff --git a/tournaments/migrations/0123_teamregistration_unique_random_index.py b/tournaments/migrations/0123_teamregistration_unique_random_index.py new file mode 100644 index 0000000..e1978e1 --- /dev/null +++ b/tournaments/migrations/0123_teamregistration_unique_random_index.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1 on 2025-05-13 09:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tournaments', '0122_groupstage_planned_start_date_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='teamregistration', + name='unique_random_index', + field=models.IntegerField(default=0), + ), + ] diff --git a/tournaments/models/team_registration.py b/tournaments/models/team_registration.py index 274a815..6fabcde 100644 --- a/tournaments/models/team_registration.py +++ b/tournaments/models/team_registration.py @@ -32,6 +32,7 @@ class TeamRegistration(SideStoreModel): final_ranking = models.IntegerField(null=True, blank=True) points_earned = models.IntegerField(null=True, blank=True) + unique_random_index = models.IntegerField(default=0) def delete_dependencies(self): for player_registration in self.player_registrations.all(): diff --git a/tournaments/models/tournament.py b/tournaments/models/tournament.py index 8adc63c..54b782d 100644 --- a/tournaments/models/tournament.py +++ b/tournaments/models/tournament.py @@ -432,20 +432,22 @@ class Tournament(BaseModel): t.registration_date is None, t.registration_date or datetime.min, t.initial_weight, + t.unique_random_index, t.team_registration.id )) waiting_teams.sort(key=lambda t: ( t.registration_date is None, t.registration_date or datetime.min, t.initial_weight, + t.unique_random_index, t.team_registration.id )) else: - complete_teams.sort(key=lambda t: (t.initial_weight, t.team_registration.id)) - waiting_teams.sort(key=lambda t: (t.initial_weight, t.team_registration.id)) + complete_teams.sort(key=lambda t: (t.initial_weight, t.unique_random_index, t.team_registration.id)) + waiting_teams.sort(key=lambda t: (t.initial_weight, t.unique_random_index, t.team_registration.id)) - wildcard_group_stage.sort(key=lambda t: (t.initial_weight, t.team_registration.id)) - wildcard_bracket.sort(key=lambda t: (t.initial_weight, t.team_registration.id)) + wildcard_group_stage.sort(key=lambda t: (t.initial_weight, t.unique_random_index, t.team_registration.id)) + wildcard_bracket.sort(key=lambda t: (t.initial_weight, t.unique_random_index, t.team_registration.id)) # Split teams into main bracket and waiting list computed_team_count = self.team_count - len(wildcard_bracket) - len(wildcard_group_stage) @@ -454,8 +456,8 @@ class Tournament(BaseModel): qualified_teams = complete_teams[:computed_team_count] excess_teams = complete_teams[computed_team_count:] - qualified_teams.sort(key=lambda t: (t.initial_weight, t.team_registration.id)) - excess_teams.sort(key=lambda t: (t.initial_weight, t.team_registration.id)) + qualified_teams.sort(key=lambda t: (t.initial_weight, t.unique_random_index, t.team_registration.id)) + excess_teams.sort(key=lambda t: (t.initial_weight, t.unique_random_index, t.team_registration.id)) # Combine all waiting list teams waiting_list = excess_teams + waiting_teams @@ -464,16 +466,17 @@ class Tournament(BaseModel): t.registration_date is None, t.registration_date or datetime.min, t.initial_weight, + t.unique_random_index, t.team_registration.id )) else: - waiting_list.sort(key=lambda t: (t.initial_weight, t.team_registration.id)) + waiting_list.sort(key=lambda t: (t.initial_weight, t.unique_random_index, t.team_registration.id)) # Return final sorted list bracket_teams = qualified_teams[:bracket_seeds] + wildcard_bracket gs_teams = qualified_teams[bracket_seeds:(bracket_seeds+group_stage_team_count)] + wildcard_group_stage - bracket_teams.sort(key=lambda t: (t.initial_weight, t.team_registration.id)) - gs_teams.sort(key=lambda t: (t.initial_weight, t.team_registration.id)) + bracket_teams.sort(key=lambda t: (t.initial_weight, t.unique_random_index, t.team_registration.id)) + gs_teams.sort(key=lambda t: (t.initial_weight, t.unique_random_index, t.team_registration.id)) all_teams = bracket_teams + gs_teams for team in bracket_teams: team.set_stage("Tableau") diff --git a/tournaments/templates/tournaments/broadcast/broadcast_club.html b/tournaments/templates/tournaments/broadcast/broadcast_club.html index 4716b84..5d2029b 100644 --- a/tournaments/templates/tournaments/broadcast/broadcast_club.html +++ b/tournaments/templates/tournaments/broadcast/broadcast_club.html @@ -8,7 +8,7 @@ {% block content %}
-
+
{% for tournament in tournaments %}