From 9e3c3f3832be920d882138d551f780692f542944 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sun, 25 Apr 2021 12:48:39 +0200 Subject: [PATCH] Prefetch object permissions in my_students --- aleksis/apps/alsijil/views.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 76608cda4..d41415660 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -711,12 +711,26 @@ def my_students(request: HttpRequest) -> HttpResponse: .distinct() ) + # Prefetch object permissions for persons and groups the persons are members of + # because the object permissions are checked for both persons and groups + all_persons = Person.objects.filter(member_of__in=relevant_groups) + checker = ObjectPermissionChecker(request.user) + checker.prefetch_perms(relevant_groups) + checker.prefetch_perms(all_persons) + new_groups = [] for group in relevant_groups: persons = group.generate_person_list_with_class_register_statistics( - group.members.prefetch_related("primary_group__owners") + group.members.prefetch_related( + "primary_group__owners", + Prefetch("member_of", queryset=relevant_groups, to_attr="member_of_prefetched"), + ) ) - new_groups.append((group, persons)) + persons_for_group = [] + for person in persons: + person.set_object_permission_checker(checker) + persons_for_group.append(person) + new_groups.append((group, persons_for_group)) context["groups"] = new_groups context["excuse_types"] = ExcuseType.objects.all() -- GitLab