Рекурсивный sql-запрос для django M2M
Мне нужна помощь в написании рекурсивной sql команды, которая будет использоваться как функция (get_children) при использовании M2M.
models.py
class ConditionGroup(models.Model):
name = models.CharField(max_length=100, unique=True)
child_groups = models.ManyToManyField(
"self", related_name="parent_groups", blank=True, symmetrical=False
)
def get_children():
query = """
WITH RECURSIVE parents AS (
SELECT data_collector_conditiongroup.*, 0 AS relative_depth
FROM data_collector_conditiongroup
WHERE id = %s
<<HELP>>
)
ORDER BY relative_depth;
"""
return self.Meta.model.objects.raw(query, [self.id])
Затем добавьте следующие данные:
_unrelated_sub_group = ConditionGroup.objects.create(name="unrelated_sub")
_unrelated_group = ConditionGroup.objects.create(name="unrelated")
_unrelated_group.child_groups.add(_unrelated_sub_group)
sub_group_a_1 = ConditionGroup.objects.create(name="sub_group_a1")
group_a1=ConditionGroup.objects.create(name="group_a1")
group_a1.child_groups.add(sub_group_a_1)
group_a=ConditionGroup.objects.create(name="group_a")
group_a.child_groups.add(group_a1)
sub_group_b = ConditionGroup.objects.create(name="sub_group_b")
group_b = ConditionGroup.objects.create(name="group_b")
group_b.child_groups.add(sub_group_b)
group=ConditionGroup.objects.create(name="group_a")
group.child_groups.add(group_a)
group.child_groups(group_b)
На это можно посмотреть как
не связан
- неродной_под
группа
- группа_а
- группа_а1
- группа_b
- группа_а
Мне нужна рекурсивная sql-функция в Django, чтобы при запросе id
"group" получался набор запросов, содержащий group, group_a, group_a1, group_b