From f62686d7dd6ee075c007fab87de2e49729983cd5 Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Sun, 26 Dec 2021 22:29:04 +0100 Subject: [PATCH] Implement child_groups_recursive --- aleksis/core/models.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/aleksis/core/models.py b/aleksis/core/models.py index ee5030139..e928312cf 100644 --- a/aleksis/core/models.py +++ b/aleksis/core/models.py @@ -506,6 +506,17 @@ class Group(SchoolTermRelatedExtensibleModel): def child_groups_recursive(self) -> CTEQuerySet: """Get all child groups recursively.""" + def _make_cte(cte): + Through = self.child_groups.through + return ( + Through.objects.values("from_group_id") + .filter(to_group=self) + .union(cte.join(Through, to_group=cte.col.from_group_id), all=True) + ) + + cte = With.recursive(_make_cte) + return cte.join(Group, id=cte.col.from_group_id).with_cte(cte) + def __str__(self) -> str: if self.school_term: return f"{self.name} ({self.short_name}) ({self.school_term})" -- GitLab