From 3e9310790407057c94bc53c86edaa346241f9840 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Mon, 4 Nov 2024 18:46:40 +0100 Subject: [PATCH] Fix queries for person statistics --- aleksis/apps/alsijil/model_extensions.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py index 8270ddb91..5ee293aa1 100644 --- a/aleksis/apps/alsijil/model_extensions.py +++ b/aleksis/apps/alsijil/model_extensions.py @@ -1,7 +1,6 @@ -from django.utils.translation import gettext as _ - from django.db.models import FilteredRelation, Q, QuerySet from django.db.models.aggregates import Count, Sum +from django.utils.translation import gettext as _ from aleksis.apps.kolego.models import AbsenceReason from aleksis.core.models import Group, Person, SchoolTerm @@ -34,7 +33,6 @@ Group.add_permission("assign_grouprole", _("Can assign a group role for this gro Person.add_permission("register_absence_person", _("Can register an absence for a person")) - def annotate_person_statistics( persons: QuerySet[Person], participations_filter: Q, personal_notes_filter: Q ) -> QuerySet[Person]: @@ -59,7 +57,7 @@ def annotate_person_statistics( filter=Q(filtered_participation_statuses__absence_reason__count_as_absent=True), distinct=True, ), - tardiness_sum=Sum("filtered_participation_statuses__tardiness"), + tardiness_sum=Sum("filtered_participation_statuses__tardiness", distinct=True), tardiness_count=Count( "filtered_participation_statuses", filter=Q(filtered_participation_statuses__tardiness__gt=0), @@ -104,7 +102,11 @@ def annotate_person_statistics_for_school_term( datetime_end__date__lte=school_term.date_end, ) if group: - documentations.filter(Q(course__groups=group) | Q(course__groups__parent_groups=group)) + documentations.filter( + pk__in=Documentation.objects.filter(course__groups=group).union( + Documentation.objects.filter(course__groups__parent_groups=group) + ) + ) docs = list(documentations.values_list("pk", flat=True)) return annotate_person_statistics( persons, -- GitLab