From 7f2077649da8bf059ea1e253bd098bc666a75cd7 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Thu, 18 Jul 2024 17:32:33 +0200 Subject: [PATCH] Fix for recurrence optimizations --- aleksis/apps/chronos/managers.py | 4 ++-- aleksis/apps/chronos/models.py | 17 ++++++++++------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/aleksis/apps/chronos/managers.py b/aleksis/apps/chronos/managers.py index 2ba38ff0..45aecf55 100644 --- a/aleksis/apps/chronos/managers.py +++ b/aleksis/apps/chronos/managers.py @@ -9,13 +9,13 @@ from django.db.models.fields import DateField from django.db.models.functions import Concat from calendarweek import CalendarWeek -from polymorphic.managers import PolymorphicQuerySet from aleksis.apps.chronos.util.date import week_weekday_from_date, week_weekday_to_date from aleksis.apps.cursus.models import Course from aleksis.core.managers import ( AlekSISBaseManagerWithoutMigrations, DateRangeQuerySetMixin, + RecurrencePolymorphicQuerySet, SchoolTermRelatedQuerySet, ) from aleksis.core.models import Group, Person, Room @@ -866,7 +866,7 @@ class RoomPropertiesMixin: return sep.join([room.short_name for room in self.get_rooms()]) -class LessonEventQuerySet(PolymorphicQuerySet): +class LessonEventQuerySet(RecurrencePolymorphicQuerySet): """Queryset with special query methods for lesson events.""" def for_teacher(self, teacher: Union[int, Person]) -> "LessonEventQuerySet": diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py index 732c95d5..187e0d6d 100644 --- a/aleksis/apps/chronos/models.py +++ b/aleksis/apps/chronos/models.py @@ -59,7 +59,10 @@ from aleksis.apps.chronos.util.format import format_m2m from aleksis.apps.cursus import models as cursus_models from aleksis.apps.cursus.models import Course from aleksis.apps.resint.models import LiveDocument -from aleksis.core.managers import AlekSISBaseManagerWithoutMigrations, PolymorphicBaseManager +from aleksis.core.managers import ( + AlekSISBaseManagerWithoutMigrations, + RecurrencePolymorphicManager, +) from aleksis.core.mixins import ( ExtensibleModel, GlobalPermissionModel, @@ -1290,7 +1293,7 @@ class LessonEvent(CalendarEvent): name = "lesson" verbose_name = _("Lessons") - objects = PolymorphicBaseManager.from_queryset(LessonEventQuerySet)() + objects = RecurrencePolymorphicManager.from_queryset(LessonEventQuerySet)() title = models.CharField(verbose_name=_("Name"), max_length=255, blank=True) @@ -1525,12 +1528,12 @@ class LessonEvent(CalendarEvent): @classmethod def get_objects( - cls, request: HttpRequest | None = None, params: dict[str, any] | None = None + cls, request: HttpRequest | None = None, params: dict[str, any] | None = None, **kwargs ) -> Iterable: """Return all objects that should be included in the calendar.""" objs = ( super() - .get_objects(request, params) + .get_objects(request, params, **kwargs) .not_instance_of(SupervisionEvent) .select_related("subject", "course") .prefetch_related("groups", "teachers", "rooms", "groups__members") @@ -1587,7 +1590,7 @@ class SupervisionEvent(LessonEvent): name = "supervision" verbose_name = _("Supervisions") - objects = PolymorphicBaseManager.from_queryset(LessonEventQuerySet)() + objects = RecurrencePolymorphicManager.from_queryset(LessonEventQuerySet)() @classmethod def value_title(cls, reference_object: LessonEvent, request: HttpRequest | None = None) -> str: @@ -1609,10 +1612,10 @@ class SupervisionEvent(LessonEvent): @classmethod def get_objects( - cls, request: HttpRequest | None = None, params: dict[str, any] | None = None + cls, request: HttpRequest | None = None, params: dict[str, any] | None = None, **kwargs ) -> Iterable: """Return all objects that should be included in the calendar.""" - objs = cls.objects.instance_of(cls) + objs = super().get_objects(request, params, **kwargs).instance_of(cls) if params: obj_id = int(params.get("id", 0)) type_ = params.get("type", None) -- GitLab