From 42bdb3bfed9c5d86c44943ad62ccc0e2c8e06071 Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 17 Sep 2025 17:16:57 +0200 Subject: [PATCH] Add filter for user that have created an event --- tournaments/admin.py | 4 ++-- tournaments/filters.py | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) 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