diff --git a/aleksis/core/models.py b/aleksis/core/models.py index 0b56b742bbe5019de1cb6e4fa85951250728851d..489e23a23b37e7a0fe063385fbeaad1ab2098226 100644 --- a/aleksis/core/models.py +++ b/aleksis/core/models.py @@ -300,6 +300,14 @@ class Person(ExtensibleModel): user_info_tracker = FieldTracker(fields=("first_name", "last_name", "email")) + @property + def member_of_recursive(self) -> QuerySet: + """Get all groups this person is a member of, recursively.""" + q = self.member_of + for group in q.all(): + q = q.union(group.parent_groups_recursive) + return q + def save(self, *args, **kwargs): # Determine all fields that were changed since last load dirty = self.pk is None or bool(self.user_info_tracker.changed())