Рекурсивный 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

Вернуться на верх