diff --git a/tournaments/admin.py b/tournaments/admin.py index 1ee20d0..c6926b0 100644 --- a/tournaments/admin.py +++ b/tournaments/admin.py @@ -11,7 +11,7 @@ from datetime import datetime, timedelta # Add this import from .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, Court, DateInterval, FailedApiCall, Log, DeviceToken, DrawLog, UnregisteredTeam, UnregisteredPlayer, Image from .forms import CustomUserCreationForm, CustomUserChangeForm -from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter +from .filters import TeamScoreTournamentListFilter, MatchTournamentListFilter, SimpleTournamentListFilter, MatchTypeListFilter, SimpleIndexListFilter, StartDateRangeFilter, UserWithEventsFilter from sync.admin import SyncedObjectAdmin @@ -23,7 +23,7 @@ class CustomUserAdmin(UserAdmin): filter_horizontal = ('clubs',) list_display = ['email', 'first_name', 'last_name', 'username', 'date_joined', 'latest_event_club_name', 'is_active', 'event_count', 'origin', 'registration_payment_mode', 'licence_id'] - list_filter = ['is_active', 'origin'] + list_filter = ['is_active', 'origin', UserWithEventsFilter] ordering = ['-date_joined'] raw_id_fields = ['agents'] fieldsets = [ diff --git a/tournaments/filters.py b/tournaments/filters.py index 5d99d79..aa1e8af 100644 --- a/tournaments/filters.py +++ b/tournaments/filters.py @@ -1,6 +1,6 @@ from django.contrib import admin from .models import Tournament, Match -from django.db.models import Q +from django.db.models import Q, Count from django.utils.translation import gettext_lazy as _ from django.utils import timezone from datetime import timedelta @@ -135,3 +135,20 @@ class StartDateRangeFilter(admin.SimpleListFilter): start_date__gte=today - timedelta(days=3), start_date__lte=today + timedelta(days=3) ) + +class UserWithEventsFilter(admin.SimpleListFilter): + title = _('has events') + parameter_name = 'has_events' + + def lookups(self, request, model_admin): + return ( + ('yes', _('Has events')), + ('no', _('No events')), + ) + + def queryset(self, request, queryset): + if self.value() == 'yes': + return queryset.annotate(events_count=Count('events')).filter(events_count__gt=0) + elif self.value() == 'no': + return queryset.annotate(events_count=Count('events')).filter(events_count=0) + return queryset