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 .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter
from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter
class CustomUserAdmin(UserAdmin):
@ -48,7 +48,7 @@ class EventAdmin(admin.ModelAdmin):
class TournamentAdmin(admin.ModelAdmin):
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']
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 django.db.models import Q
from django.utils.translation import gettext_lazy as _
from django.utils import timezone
from datetime import timedelta
import uuid
from enum import Enum
@ -101,3 +103,36 @@ class SimpleIndexListFilter(admin.SimpleListFilter):
return queryset.filter(index=self.value())
else:
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