From eb2f42e74352ea0acdee89b20e3936f8157d3151 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Thu, 10 Sep 2020 17:34:53 +0200
Subject: [PATCH] Prefetch form select data

---
 aleksis/apps/alsijil/forms.py  | 9 ++++++++-
 aleksis/apps/alsijil/models.py | 8 +++++++-
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index 84688f87a..c66564465 100644
--- a/aleksis/apps/alsijil/forms.py
+++ b/aleksis/apps/alsijil/forms.py
@@ -46,6 +46,11 @@ class PersonalNoteForm(forms.ModelForm):
         if self.instance and getattr(self.instance, "person", None):
             self.fields["person_name"].initial = str(self.instance.person)
 
+        self.fields["extra_marks"].choices = [(e.id, str(e)) for e in ExtraMark.all]
+        self.fields["excuse_type"].choices = [(None, "-----")] + [
+            (e.id, str(e)) for e in ExcuseType.all
+        ]
+
 
 class SelectForm(forms.Form):
     layout = Layout(Row("group", "teacher"))
@@ -164,7 +169,9 @@ class RegisterAbsenceForm(forms.Form):
                     )
                 )
             )
-            self.fields["person"].queryset = Person.objects.filter(pk__in=list(persons_qs.values_list("pk", flat=True)))
+            self.fields["person"].queryset = Person.objects.filter(
+                pk__in=list(persons_qs.values_list("pk", flat=True))
+            )
 
         self.fields["from_period"].choices = period_choices
         self.fields["to_period"].choices = period_choices
diff --git a/aleksis/apps/alsijil/models.py b/aleksis/apps/alsijil/models.py
index fe9d60e42..91644e9d9 100644
--- a/aleksis/apps/alsijil/models.py
+++ b/aleksis/apps/alsijil/models.py
@@ -1,9 +1,9 @@
-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 _
 
+from cache_memoize import cache_memoize
 from calendarweek import CalendarWeek
 
 from aleksis.apps.alsijil.managers import PersonalNoteManager
@@ -36,6 +36,12 @@ class ExcuseType(ExtensibleModel):
     def count_label(self):
         return f"{self.short_name}_count"
 
+    @classproperty
+    @cache_memoize(3600)
+    def all(cls):
+        qs = cls.objects.all()
+        return qs
+
     class Meta:
         ordering = ["name"]
         verbose_name = _("Excuse type")
-- 
GitLab