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

Merge branch 'query' into 'master'

Optimize query

See merge request !427
parents 40b86d09 8913e041
No related branches found
No related tags found
1 merge request!427Optimize query
Pipeline #193615 failed
...@@ -4,8 +4,7 @@ from typing import Optional ...@@ -4,8 +4,7 @@ from typing import Optional
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.db import models from django.db import models
from django.db.models import QuerySet from django.db.models import QuerySet, Q
from django.db.models.query_utils import Q
from django.http import HttpRequest from django.http import HttpRequest
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone
...@@ -438,20 +437,21 @@ class ParticipationStatus(CalendarEvent): ...@@ -438,20 +437,21 @@ class ParticipationStatus(CalendarEvent):
@classmethod @classmethod
def get_objects( 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: ) -> QuerySet:
qs = ( q = additional_filter or Q()
super()
.get_objects(request, params, **kwargs)
.select_related("person", "absence_reason")
)
if params: if params:
if params.get("person"): if params.get("person"):
qs = qs.filter(person=params["person"]) q = q & Q(person=params["person"])
elif params.get("persons"): elif params.get("persons"):
qs = qs.filter(person__in=params["persons"]) q = q & Q(person__in=params["persons"])
elif params.get("group"): 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 return qs
@classmethod @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