From cccfa48afa0c1acaf9893a727e395300340b385d Mon Sep 17 00:00:00 2001 From: Michael Bauer <michael-bauer@posteo.de> Date: Wed, 30 Oct 2024 11:43:10 +0100 Subject: [PATCH] Factor out the notable_participations and personal_notes prefetch Is used in person_overview & coursebook. --- aleksis/apps/alsijil/tasks.py | 58 +++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/aleksis/apps/alsijil/tasks.py b/aleksis/apps/alsijil/tasks.py index 882bbc1ae..dbecfe16b 100644 --- a/aleksis/apps/alsijil/tasks.py +++ b/aleksis/apps/alsijil/tasks.py @@ -157,6 +157,29 @@ def generate_full_register_printout( prefetched_persons.append(person) # NEXT begins here: + def prefetch_notable_participations(*prefetch_related): + return Prefetch( + "participations", + to_attr="notable_participations", + queryset=ParticipationStatus.objects + .exclude( + Q(absence_reason__isnull=True) + | Q(tardiness__isnull=True) + ) + .select_related("absence_reason") + .prefetch_related(*prefetch_related), + ) + + def prefetch_personal_notes(*prefetch_related): + return Prefetch( + "new_personal_notes", + queryset=NewPersonalNote.objects + .exclude( + Q(note="") + | Q(extra_mark=None)) + .select_related("extra_mark") + .prefetch_related(*prefetch_related), + ) # build the query-set group = Group.objects.filter(pk=group) @@ -198,40 +221,23 @@ def generate_full_register_printout( if include_person_overviews: doc_query_set = Documentation.objects.select_related("subject").prefetch_related("teachers"), context["members"] = context["members"].prefetch_related( - Prefetch( - "participations", - queryset=ParticipationStatus.objects - .exclude( - Q(absence_reason__isnull=True) - | Q(tardiness__isnull=True) + prefetch_notable_participations( + Prefetch( + "related_documentation", + queryset=doc_query_set, ) - .select_related("absence_reason") - .prefetch_related( - Prefetch( - "related_documentation", - queryset=doc_query_set, - ), - ), - to_attr="notable_participations", ), - Prefetch( - "new_personal_notes", - queryset=NewPersonalNote.objects - .exclude( - Q(note="") - | Q(extra_marks=None)) - .prefetch_related( - Prefetch( - "documentation", - queryset=doc_query_set, - ), - "extra_mark", + prefetch_personal_notes( + Prefetch( + "documentation", + queryset=doc_query_set, ) ), ) if include_coursebook: context["documentations_by_day"] = {} + documentations.prefetch_related("participations", "personal_notes") for day in documentations.dates("datetime_start", "day"): context["documentations_by_day"][day] = documentations.filter(datetime_start__date=day) -- GitLab