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

Merge branch 'fix/simplify-queries' into 'master'

Optimize queries for LessonEvents

See merge request !378
parents 92512556 812fb1bb
No related branches found
No related tags found
1 merge request!378Optimize queries for LessonEvents
Pipeline #193549 failed
......@@ -27,21 +27,27 @@ class LessonEventQuerySet(RecurrencePolymorphicQuerySet):
def for_teacher(self, teacher: Union[int, Person]) -> "LessonEventQuerySet":
"""Get all lesson events for a certain person as teacher (including amends)."""
amended = self.filter(Q(amended_by__isnull=False) & (Q(teachers=teacher))).values_list(
"amended_by__pk", flat=True
)
from .models import LessonEvent
amended = LessonEvent.objects.filter(
amended_by__isnull=False, teachers=teacher
).values_list("amended_by__pk", flat=True)
return self.filter(Q(teachers=teacher) | Q(pk__in=amended)).distinct()
def for_participant(self, person: Union[int, Person]) -> "LessonEventQuerySet":
"""Get all lesson events the person participates in (including amends)."""
amended = self.filter(Q(amended_by__isnull=False) & Q(groups__members=person)).values_list(
"amended_by__pk", flat=True
)
from .models import LessonEvent
amended = LessonEvent.objects.filter(
amended_by__isnull=False, groups__members=person
).values_list("amended_by__pk", flat=True)
return self.filter(Q(groups__members=person) | Q(pk__in=amended)).distinct()
def for_group(self, group: Union[int, Group]) -> "LessonEventQuerySet":
"""Get all lesson events for a certain group (including amends/as parent group)."""
amended = self.filter(
from .models import LessonEvent
amended = LessonEvent.objects.filter(
Q(amended_by__isnull=False) & (Q(groups=group) | Q(groups__parent_groups=group))
).values_list("amended_by__pk", flat=True)
return self.filter(
......@@ -50,21 +56,27 @@ class LessonEventQuerySet(RecurrencePolymorphicQuerySet):
def for_room(self, room: Union[int, Room]) -> "LessonEventQuerySet":
"""Get all lesson events for a certain room (including amends)."""
amended = self.filter(Q(amended_by__isnull=False) & (Q(rooms=room))).values_list(
"amended_by__pk", flat=True
)
from .models import LessonEvent
amended = LessonEvent.objects.filter(
Q(amended_by__isnull=False) & (Q(rooms=room))
).values_list("amended_by__pk", flat=True)
return self.filter(Q(rooms=room) | Q(pk__in=amended)).distinct()
def for_course(self, course: Union[int, Course]) -> "LessonEventQuerySet":
"""Get all lesson events for a certain course (including amends)."""
amended = self.filter(Q(amended_by__isnull=False) & (Q(course=course))).values_list(
from .models import LessonEvent
amended = LessonEvent.objects.filter(amended_by__isnull=False, course=course).values_list(
"amended_by__pk", flat=True
)
return self.filter(Q(course=course) | Q(pk__in=amended)).distinct()
def for_person(self, person: Union[int, Person]) -> "LessonEventQuerySet":
"""Get all lesson events for a certain person (as teacher/participant, including amends)."""
amended = self.filter(
from .models import LessonEvent
amended = LessonEvent.objects.filter(
Q(amended_by__isnull=False) & (Q(teachers=person) | Q(groups__members=person))
).values_list("amended_by__pk", flat=True)
return self.filter(
......@@ -78,7 +90,9 @@ class LessonEventQuerySet(RecurrencePolymorphicQuerySet):
teacher/participant/group owner/parent group owner,
including those amended.
"""
amended = self.filter(
from .models import LessonEvent
amended = LessonEvent.objects.filter(
Q(amended_by__isnull=False)
& (
Q(teachers=person)
......
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