diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 319ea72f32cfec157e68ee465c526bb21ef735e1..e166dd5440849e0bf345b46fbe56c5b6cdbfe472 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -14,6 +14,11 @@ Added * Add feature to manage instructions and track whether groups have been instructed accordingly (e. g. for alarm plans). +Fixed +~~~~~ + +* Students were displayed multiple times in class register views. + `2.1`_ - 2022-06-25 ------------------- diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py index 3e66c8a30048b8173c95e3208b96e5eb9fcbed95..fbede85fc088d7d8fc2f9b87acb79dc53a1900fc 100644 --- a/aleksis/apps/alsijil/views.py +++ b/aleksis/apps/alsijil/views.py @@ -250,8 +250,10 @@ def register_object( else: persons = Person.objects.all() - persons_qs = register_object.get_personal_notes(persons, wanted_week).filter( - person__member_of__in=request.user.person.owner_of.all() + persons_qs = ( + register_object.get_personal_notes(persons, wanted_week) + .filter(person__member_of__in=request.user.person.owner_of.all()) + .distinct() ) # Annotate group roles @@ -486,12 +488,16 @@ def week_view( if not request.user.has_perm("alsijil.view_week_personalnote_rule", instance): persons_qs = persons_qs.filter(pk=request.user.person.pk) elif group: - persons_qs = persons_qs.filter(member_of=group).filter( - member_of__in=request.user.person.owner_of.all() + persons_qs = ( + persons_qs.filter(member_of=group) + .filter(member_of__in=request.user.person.owner_of.all()) + .distinct() ) else: - persons_qs = persons_qs.filter(member_of__in=groups).filter( - member_of__in=request.user.person.owner_of.all() + persons_qs = ( + persons_qs.filter(member_of__in=groups) + .filter(member_of__in=request.user.person.owner_of.all()) + .distinct() ) # Prefetch object permissions for persons and groups the persons are members of @@ -802,12 +808,16 @@ def my_students(request: HttpRequest) -> HttpResponse: new_groups = [] for group in relevant_groups: - persons = group.generate_person_list_with_class_register_statistics( - group.members.prefetch_related( - "primary_group__owners", - Prefetch("member_of", queryset=relevant_groups, to_attr="member_of_prefetched"), + persons = ( + group.generate_person_list_with_class_register_statistics( + group.members.prefetch_related( + "primary_group__owners", + Prefetch("member_of", queryset=relevant_groups, to_attr="member_of_prefetched"), + ) ) - ).filter(member_of__in=request.user.person.owner_of.all()) + .filter(member_of__in=request.user.person.owner_of.all()) + .distinct() + ) persons_for_group = [] for person in persons: person.set_object_permission_checker(checker) @@ -840,10 +850,10 @@ class StudentsList(PermissionRequiredMixin, DetailView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["group"] = self.object - context[ - "persons" - ] = self.object.generate_person_list_with_class_register_statistics().filter( - member_of__in=self.request.user.person.owner_of.all() + context["persons"] = ( + self.object.generate_person_list_with_class_register_statistics() + .filter(member_of__in=self.request.user.person.owner_of.all()) + .distinct() ) context["extra_marks"] = ExtraMark.objects.all() context["excuse_types"] = ExcuseType.objects.filter(count_as_absent=True)