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

Optimize model extensions

parent 940687dc
No related branches found
No related tags found
1 merge request!90Performance optimizations
Pipeline #3684 passed
from datetime import date
from typing import Dict, Optional, Union
from typing import Dict, Optional, Union, Iterator
from django.db.models import Exists, OuterRef, QuerySet
from django.utils.translation import gettext as _
......@@ -186,11 +186,12 @@ def get_or_create_lesson_documentation(
@LessonPeriod.method
def get_absences(self, week: Optional[CalendarWeek] = None) -> QuerySet:
def get_absences(self, week: Optional[CalendarWeek] = None) -> Iterator:
"""Get all personal notes of absent persons for this lesson."""
if not week:
week = self.week
return self.personal_notes.filter(week=week.week, year=week.year, absent=True)
return filter(lambda p: p.week == week.week and p.year == week.year and p.absent, self.personal_notes.all())
@LessonPeriod.method
......@@ -230,7 +231,7 @@ def get_extra_marks(
week = self.week
stats = {}
for extra_mark in ExtraMark.objects.all():
for extra_mark in ExtraMark.all:
qs = self.personal_notes.filter(
week=week.week, year=week.year, extra_marks=extra_mark
)
......
from cache_memoize import cache_memoize
from django.db import models
from django.utils.decorators import classproperty
from django.utils.formats import date_format
from django.utils.translation import gettext_lazy as _
......@@ -207,6 +209,11 @@ class ExtraMark(ExtensibleModel):
def count_label(self):
return f"{self.short_name}_count"
@classproperty
@cache_memoize(3600)
def all(cls):
return cls.objects.all()
class Meta:
ordering = ["short_name"]
verbose_name = _("Extra mark")
......
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