From 50a8a81d4ab099f5a43d0872fc010ea96901c05c Mon Sep 17 00:00:00 2001 From: Laurent Date: Mon, 17 Jun 2024 09:13:59 +0200 Subject: [PATCH] Adds tournament filter for team_score and match --- tournaments/admin.py | 7 +++++ tournaments/filters.py | 43 +++++++++++++++++++++++++++++++ tournaments/models/group_stage.py | 3 ++- tournaments/models/round.py | 8 ++++-- 4 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 tournaments/filters.py diff --git a/tournaments/admin.py b/tournaments/admin.py index aa2ae46..379e817 100644 --- a/tournaments/admin.py +++ b/tournaments/admin.py @@ -1,11 +1,16 @@ from django.contrib import admin +from tournaments.models import team_registration + from .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, Court, DateInterval, FailedApiCall from django.contrib.auth.admin import UserAdmin from django.contrib.auth.forms import UserCreationForm, UserChangeForm from .forms import CustomUserCreationForm, CustomUserChangeForm +from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter + + class CustomUserAdmin(UserAdmin): form = CustomUserChangeForm add_form = CustomUserCreationForm @@ -38,6 +43,7 @@ class TournamentAdmin(admin.ModelAdmin): class TeamScoreAdmin(admin.ModelAdmin): list_display = ['team_registration', 'match', 'score', 'walk_out'] + list_filter = [TeamScoreTournamentListFilter] class RoundAdmin(admin.ModelAdmin): list_display = ['tournament', 'name', 'index', 'parent'] @@ -49,6 +55,7 @@ class PlayerRegistrationAdmin(admin.ModelAdmin): class MatchAdmin(admin.ModelAdmin): list_display = ['__str__', 'round', 'group_stage', 'start_date', 'index'] + list_filter = [MatchTournamentListFilter] class GroupStageAdmin(admin.ModelAdmin): list_display = ['tournament', 'index', 'start_date'] diff --git a/tournaments/filters.py b/tournaments/filters.py new file mode 100644 index 0000000..b77cdef --- /dev/null +++ b/tournaments/filters.py @@ -0,0 +1,43 @@ +from django.contrib import admin +from .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, Court, DateInterval, FailedApiCall +from django.db.models import Q +from django.utils.translation import gettext_lazy as _ +import uuid + +class TeamScoreTournamentListFilter(admin.SimpleListFilter): + # Human-readable title which will be displayed in the + # right admin sidebar just above the filter options. + title = _("tournoi") + + # Parameter for the filter that will be used in the URL query. + parameter_name = "tournament" + + def lookups(self, request, model_admin): + tournaments = Tournament.objects.order_by('-start_date') + return [(t.id, t.display_name()) for t in tournaments] + + def queryset(self, request, queryset): + if self.value(): + return queryset.filter(team_registration__tournament__id=self.value()) + else: + return queryset + +class MatchTournamentListFilter(admin.SimpleListFilter): + # Human-readable title which will be displayed in the + # right admin sidebar just above the filter options. + title = _("tournoi") + + # Parameter for the filter that will be used in the URL query. + parameter_name = "tournament" + + def lookups(self, request, model_admin): + tournaments = Tournament.objects.order_by('-start_date') + return [(t.id, t.display_name()) for t in tournaments] + + def queryset(self, request, queryset): + if self.value(): + query_round = Q(round__tournament__id=self.value()) + query_group_stage = Q(group_stage__tournament__id=self.value()) + return queryset.filter(query_round | query_group_stage) + else: + return queryset diff --git a/tournaments/models/group_stage.py b/tournaments/models/group_stage.py index 9880ec5..92c25c9 100644 --- a/tournaments/models/group_stage.py +++ b/tournaments/models/group_stage.py @@ -15,7 +15,8 @@ class GroupStage(models.Model): name = models.CharField(max_length=200, null=True, blank=True) def __str__(self): - return f"{self.tournament.display_name()} - {self.display_name()}" + return self.display_name() + # return f"{self.tournament.display_name()} - {self.display_name()}" def display_name(self): if self.name: diff --git a/tournaments/models/round.py b/tournaments/models/round.py index fa22f55..933555e 100644 --- a/tournaments/models/round.py +++ b/tournaments/models/round.py @@ -12,9 +12,13 @@ class Round(models.Model): def __str__(self): if self.parent: - return f"{self.tournament.display_name()} - LB: {self.name()}" + return f"LB: {self.name()}" else: - return f"{self.tournament.display_name()} - {self.name()}" + return self.name() + # if self.parent: + # return f"{self.tournament.display_name()} - LB: {self.name()}" + # else: + # return f"{self.tournament.display_name()} - {self.name()}" def name(self): if self.parent: