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

Optimize query

parent 7c395fb4
No related branches found
No related tags found
1 merge request!48Optimize query
Pipeline #193530 passed
from django.db import models from django.db import models
from django.db.models import QuerySet from django.db.models import Q, QuerySet
from django.http import HttpRequest from django.http import HttpRequest
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
...@@ -110,16 +110,24 @@ class Absence(FreeBusy): ...@@ -110,16 +110,24 @@ class Absence(FreeBusy):
@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 = super().get_objects(request, params, **kwargs).select_related("person", "reason") q = additional_filter or Q()
if params: if params:
if params.get("person"): if params.get("person"):
qs = qs.filter(person_id=params["person"]) q = q & Q(person_id=params["person"])
elif params.get("persons"): elif params.get("persons"):
qs = qs.filter(person_id__in=params["persons"]) q = q & Q(person_id__in=params["persons"])
elif params.get("group"): elif params.get("group"):
qs = qs.filter(person__member_of__id=params.get("group")) q = q & Q(person__member_of__id=params.get("group"))
qs = super().get_objects(
request, params, additional_filter=q, select_related=["person", "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