diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py index fb9e57c40fa66ce75b93e11c451cb87a6b21f69c..9d7b398dab8415a7ff05333c823879a165af0e95 100644 --- a/aleksis/apps/alsijil/models.py +++ b/aleksis/apps/alsijil/models.py @@ -4,8 +4,7 @@ from typing import Optional from django.contrib.auth.models import User from django.core.exceptions import PermissionDenied from django.db import models -from django.db.models import QuerySet -from django.db.models.query_utils import Q +from django.db.models import QuerySet, Q from django.http import HttpRequest from django.urls import reverse from django.utils import timezone @@ -438,20 +437,21 @@ class ParticipationStatus(CalendarEvent): @classmethod def get_objects( - cls, request: HttpRequest | None = None, params: dict[str, any] | None = None, **kwargs + cls, request: HttpRequest | None = None, params: dict[str, any] | None = None, additional_filter: Q | None = None, **kwargs ) -> QuerySet: - qs = ( - super() - .get_objects(request, params, **kwargs) - .select_related("person", "absence_reason") - ) + q = additional_filter or Q() if params: if params.get("person"): - qs = qs.filter(person=params["person"]) + q = q & Q(person=params["person"]) elif params.get("persons"): - qs = qs.filter(person__in=params["persons"]) + q = q & Q(person__in=params["persons"]) elif params.get("group"): - qs = qs.filter(groups_of_person__in=params.get("group")) + q = q & Q(groups_of_person__in=params.get("group")) + qs = ( + super() + .get_objects(request, params, additional_filter=q, select_related=["person", "absence_reason"], **kwargs) + ) + return qs @classmethod