From ee72ebc226990797223091806889707920a4188b Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Thu, 15 Oct 2020 17:49:52 +0200 Subject: [PATCH] Fix problems with update_or_create and prefetching --- aleksis/apps/alsijil/model_extensions.py | 34 +++++++++++++++--------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/aleksis/apps/alsijil/model_extensions.py b/aleksis/apps/alsijil/model_extensions.py index 847d815c7..02684e2b6 100644 --- a/aleksis/apps/alsijil/model_extensions.py +++ b/aleksis/apps/alsijil/model_extensions.py @@ -54,16 +54,20 @@ def mark_absent( continue with reversion.create_revision(): - personal_note, created = PersonalNote.objects.update_or_create( - person=self, - lesson_period=lesson_period, - week=wanted_week.week, - year=wanted_week.year, - defaults={ - "absent": absent, - "excused": excused, - "excuse_type": excuse_type, - }, + personal_note, created = ( + PersonalNote.objects.select_related(None) + .prefetch_related(None) + .update_or_create( + person=self, + lesson_period=lesson_period, + week=wanted_week.week, + year=wanted_week.year, + defaults={ + "absent": absent, + "excused": excused, + "excuse_type": excuse_type, + }, + ) ) personal_note.groups_of_person.set(self.member_of.all()) @@ -119,8 +123,14 @@ def get_personal_notes(self, wanted_week: CalendarWeek): for personal_note in new_personal_notes: personal_note.groups_of_person.set(personal_note.person.member_of.all()) - return PersonalNote.objects.select_related("person").filter( - lesson_period=self, week=wanted_week.week, year=wanted_week.year + return ( + PersonalNote.objects.filter( + lesson_period=self, week=wanted_week.week, year=wanted_week.year + ) + .select_related(None) + .prefetch_related(None) + .select_related("person", "excuse_type") + .prefetch_related("extra_marks") ) -- GitLab