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