From dbff619980897e19ac9b44dd6278d37701eaa975 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Tue, 10 Aug 2021 20:14:34 +0200
Subject: [PATCH] Add distinct to permission-related queries in
 FilterRegisterObjectForm and AssignGroupRoleForm

(cherry picked from commit c44746467e85616fbbefb0f29692a372feede1ea)
---
 CHANGELOG.rst                 |  1 +
 aleksis/apps/alsijil/forms.py | 10 ++++++----
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 5f4e9ef13..e1970a31b 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -13,6 +13,7 @@ Fixed
 ~~~~~
 
 * The _Delete personal note_ action didn't work due to wrong usage of ``bulk_update``.
+* Groups and persons were shown multiple times in some forms due to filtering by permissions.
 
 `2.0rc4`_ - 2021-08-01
 ----------------------
diff --git a/aleksis/apps/alsijil/forms.py b/aleksis/apps/alsijil/forms.py
index cb12a4eb8..042b25336 100644
--- a/aleksis/apps/alsijil/forms.py
+++ b/aleksis/apps/alsijil/forms.py
@@ -256,11 +256,13 @@ class AssignGroupRoleForm(forms.ModelForm):
                 )
             else:
                 persons = persons.filter(member_of__owners=self.request.user.person)
-            self.fields["person"].queryset = persons
+            self.fields["person"].queryset = persons.distinct()
 
             if "groups" not in initial:
-                groups = Group.objects.for_current_school_term_or_all().filter(
-                    owners=self.request.user.person
+                groups = (
+                    Group.objects.for_current_school_term_or_all()
+                    .filter(owners=self.request.user.person)
+                    .distinct()
                 )
                 self.fields["groups"].queryset = groups
 
@@ -332,7 +334,7 @@ class FilterRegisterObjectForm(forms.Form):
                 | Q(lessons__lesson_periods__substitutions__teachers=person)
                 | Q(events__teachers=person)
                 | Q(extra_lessons__teachers=person)
-            )
+            ).distinct()
         elif not for_person:
             groups = Group.objects.all()
         self.fields["group"].queryset = groups
-- 
GitLab