From d5f0d27e13ae80a3339e2dbafc4d403663f32281 Mon Sep 17 00:00:00 2001 From: Bidot-Naude Thomas <thomas.bidotnaude@student-cs.fr> Date: Fri, 12 Feb 2021 18:43:45 +0100 Subject: [PATCH] Ajout de 3 filtres par etablissements --- projects/admin.py | 30 ++++++++++++++++++++++++++---- register/admin.py | 23 ++++++++++++++++++++++- visits/admin.py | 22 +++++++++++++++++++++- 3 files changed, 69 insertions(+), 6 deletions(-) diff --git a/projects/admin.py b/projects/admin.py index 5a65a46..e43c198 100644 --- a/projects/admin.py +++ b/projects/admin.py @@ -5,6 +5,8 @@ from django.contrib import admin from dynamicforms.views import download_multiple_forms_entries from dynamicforms.models import Form from .models import Edition, Participation, Project, EditionForm +from django.contrib.admin import SimpleListFilter +from profiles.models import Student @admin.register(Project) @@ -37,7 +39,26 @@ class OrganizersInline(admin.TabularInline): extra = 0 -@admin.register(Edition) +class SchoolFilter(admin.SimpleListFilter): + title = 'établissement' + parameter_name = 'profiles__school' + + def lookups(self, request, model_admin): + list_of_school = [] + query = Student.objects.values_list( + "school", flat=True).distinct() + for school in query: + list_of_school.append((school, school)) + return list_of_school + + def queryset(self, request, queryset): + if self.value(): + emails = Student.objects.filter( + school=self.value()).values_list("user__email", flat=True) + return queryset.filter(user__email__in=emails) + + +@ admin.register(Edition) class EditionAdmin(admin.ModelAdmin): """Admin panel for editions.""" @@ -73,7 +94,7 @@ class EditionAdmin(admin.ModelAdmin): num_cancelled.short_description = 'Annulés' -@admin.register(EditionForm) +@ admin.register(EditionForm) class EditionFormAdmin(admin.ModelAdmin): """Admin panel for edition forms.""" @@ -81,11 +102,12 @@ class EditionFormAdmin(admin.ModelAdmin): list_filter = ('edition', 'deadline',) -@admin.register(Participation) +@ admin.register(Participation) class ParticipationAdmin(admin.ModelAdmin): """Participation admin panel.""" list_display = ('user', 'edition', 'submitted', 'state') - list_filter = ('edition', 'submitted', 'state',) + list_filter = (SchoolFilter, + 'edition', 'submitted', 'state',) readonly_fields = ('submitted',) search_fields = ('user__first_name', 'user__last_name', 'user__email',) diff --git a/register/admin.py b/register/admin.py index 8273b9e..175b182 100644 --- a/register/admin.py +++ b/register/admin.py @@ -2,14 +2,35 @@ from django.contrib import admin from .models import Registration +from profiles.models import Student # Register your models here. +class SchoolFilter(admin.SimpleListFilter): + title = 'établissement' + parameter_name = 'profiles__school' + + def lookups(self, request, model_admin): + list_of_school = [] + query = Student.objects.values_list( + "school", flat=True).distinct() + for school in query: + list_of_school.append((school, school)) + return list_of_school + + def queryset(self, request, queryset): + if self.value(): + emails = Student.objects.filter( + school=self.value()).values_list("user__email", flat=True) + return queryset.filter(email__in=emails) + + @admin.register(Registration) class RegistrationAdmin(admin.ModelAdmin): """Admin panel for registrations.""" list_display = ('last_name', 'first_name', 'submitted') readonly_fields = ('submitted',) - list_filter = ('submitted', 'validated') + list_filter = (SchoolFilter, + 'submitted', 'validated') diff --git a/visits/admin.py b/visits/admin.py index 0f1462e..c6a76e9 100644 --- a/visits/admin.py +++ b/visits/admin.py @@ -8,10 +8,30 @@ from django.utils.safestring import mark_safe from django.http import HttpResponse import csv from .models import Participation, Place, Visit +from profiles.models import Student # Register your models here. +class SchoolFilter(admin.SimpleListFilter): + title = 'établissement' + parameter_name = 'profiles__school' + + def lookups(self, request, model_admin): + list_of_school = [] + query = Student.objects.values_list( + "school", flat=True).distinct() + for school in query: + list_of_school.append((school, school)) + return list_of_school + + def queryset(self, request, queryset): + if self.value(): + emails = Student.objects.filter( + school=self.value()).values_list("user__email", flat=True) + return queryset.filter(user__email__in=emails) + + class RegistrationsOpenFilter(admin.SimpleListFilter): """Custom filter to filter visits by their registration openness. @@ -115,7 +135,7 @@ class ParticipationAdmin(admin.ModelAdmin): """Admin panel for visit participations.""" list_display = ('submitted', 'visit', 'user_link', 'accepted', 'present') - list_filter = ('submitted', 'accepted', 'present') + list_filter = (SchoolFilter, 'submitted', 'accepted', 'present') actions = [accept_selected_participations, reject_selected_participations] def user_link(self, participation: Participation): -- GitLab