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