Как построить django queryset, чтобы показать все связанные объекты, сгруппированные и отображаемые в шаблоне рендеринга

Достичь: Введите данные в шаблон, как показано ниже:

PLan 1: ABC
 - General Objective 1
     - Sub-Objective-1
       - Task 1
       - Task 2
     - Sub-Objective-2
       - Task 1
PLan 2: ZZZ
 - General Objetivo General 1
     - Sub-Objetivo-1
       - Tarea 1
PLan 3: DDD
 - General Objetivo General 1
     - Sub-Objetivo-1
       - Tarea 1
     - Sub-Objetivo-2
       - Tarea 1

Это означает, что: План может иметь много общих целей, и эта общая цель может иметь несколько подцелей, и каждая из целей может иметь одну или несколько задач.

Мои фактические модели и все отношения:

class ActionPlan(models.Model):
    description = models.CharField ( max_length=250, null=False, default='' )

class PlanObjective(models.Model):
    actionplan = models.ForeignKey ( ActionPlan, on_delete=models.CASCADE )
    description = models.TextField ( max_length=1750, null=False, default='')
    
class PlanSubObjective ( models.Model ) :
    actionplan = models.ForeignKey ( ActionPlan, on_delete=models.CASCADE )
    planobjective = models.ForeignKey ( PlanObjective, on_delete=models.CASCADE )
    description = models.TextField ( max_length=1750, null=False, default='' )
    
class PlanSubObjectiveTask ( models.Model ) :
    actionplan = models.ForeignKey ( ActionPlan, on_delete=models.CASCADE )
    planobjective  = models.ForeignKey ( PlanObjective, on_delete=models.CASCADE )
    plansubobjective = models.ForeignKey ( PlanSubObjective, on_delete=models.CASCADE )
    description = models.TextField ( max_length=1750, null=False, default='' )

Вот мой фактический запрос:

plans = PlanSubObjectiveTask.objects.filter(period=period).select_related(
        'plansubobjective', 'planobjective', 'actionplan')

Я читал следующую документацию: https://docs.djangoproject.com/en/4.0/ref/templates/builtins/#regroup, но результаты не соответствуют ожидаемым.

Если вы считаете, что существует лучший способ построения кверисета - добро пожаловать.

Мне очень нужна помощь для выполнения этого задания. Заранее спасибо.

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