Adds date range tournament filter

bracket-feature
Laurent 9 months ago
parent 6ff1518aee
commit 220d4fa7e6
  1. 4
      tournaments/admin.py
  2. 35
      tournaments/filters.py

@ -12,7 +12,7 @@ from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .forms import CustomUserCreationForm, CustomUserChangeForm from .forms import CustomUserCreationForm, CustomUserChangeForm
from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter
class CustomUserAdmin(UserAdmin): class CustomUserAdmin(UserAdmin):
@ -48,7 +48,7 @@ class EventAdmin(admin.ModelAdmin):
class TournamentAdmin(admin.ModelAdmin): class TournamentAdmin(admin.ModelAdmin):
list_display = ['display_name', 'event', 'is_private', 'start_date', 'payment', 'creator'] list_display = ['display_name', 'event', 'is_private', 'start_date', 'payment', 'creator']
list_filter = ['is_deleted', 'event__creator'] list_filter = [StartDateRangeFilter, 'is_deleted', 'event__creator']
ordering = ['-start_date'] ordering = ['-start_date']
search_fields = ['id'] search_fields = ['id']

@ -2,6 +2,8 @@ from django.contrib import admin
from .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, Court, DateInterval, FailedApiCall 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.db.models import Q
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.utils import timezone
from datetime import timedelta
import uuid import uuid
from enum import Enum from enum import Enum
@ -101,3 +103,36 @@ class SimpleIndexListFilter(admin.SimpleListFilter):
return queryset.filter(index=self.value()) return queryset.filter(index=self.value())
else: else:
return queryset return queryset
class StartDateRangeFilter(admin.SimpleListFilter):
title = 'tournament time range' # displayed in the admin UI
parameter_name = 'date_range' # URL parameter
def lookups(self, request, model_admin):
return (
('upcoming', 'Next 30 days'),
('recent', 'Last 30 days'),
('current', 'Current (±3 days)'),
)
def queryset(self, request, queryset):
if not self.value():
return queryset
today = timezone.now().date()
if self.value() == 'upcoming':
return queryset.filter(
start_date__gte=today,
start_date__lte=today + timedelta(days=30)
)
elif self.value() == 'recent':
return queryset.filter(
start_date__gte=today - timedelta(days=30),
start_date__lte=today
)
elif self.value() == 'current':
return queryset.filter(
start_date__gte=today - timedelta(days=3),
start_date__lte=today + timedelta(days=3)
)

Loading…
Cancel
Save