From 8913e0415572d502fac0494c729ab4e705da5569 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Sun, 3 Nov 2024 16:18:46 +0100
Subject: [PATCH] Optimize query

---
 aleksis/apps/alsijil/models.py | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index fb9e57c40..9d7b398da 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
-- 
GitLab