Skip to content
Snippets Groups Projects
Verified Commit 8913e041 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Optimize query

parent 40b86d09
No related branches found
No related tags found
1 merge request!427Optimize query
Pipeline #193529 failed
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment