Рендеринг таблицы в шаблоне с внешним ключом "far" в Django

У меня есть необходимость отобразить таблицу в шаблоне ListView в приложении Django, но информация для отображения поступает из разных таблиц, на данный момент у меня построена следующая логика:

model.py


class Plan(models.Model):
    name = models.CharField(...)
    description = models.CharField(...)
    type = models.ForeignKey('Type', on_delete=models.CASCADE, null=False)

    def get_absolute_url(self):
            return reverse('plans:plans_detail', kwargs={'pk': self.pk})

    def __str__(self):        
        return self.name

class Type(models.Model):
    client = models.ForeignKey('clients.Client', on_delete=models.CASCADE, null=False)
    name = models.CharField()    
    levels = models.IntegerField()

    def get_absolute_url(self):
            return reverse('plans:type_detail', kwargs={'pk': self.pk})

    def __str__(self):        
        return self.name

class Levelname(models.Model):        
        plan_type = models.ForeignKey(Type, on_delete=models.CASCADE)
        level = models.IntegerField()
        name = models.CharField()
        strategy_name = models.CharField()

        class Meta:
                unique_together = ('plan_type', 'level',)

        def __str__(self):
                return self.name

class Node(models.Model):
        parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE)
        plan = models.ForeignKey(Plan, on_delete=models.CASCADE, related_name='nodes')        
        name = models.CharField(max_length=100, null=False)
        level = models.ForeignKey(LevelName, on_delete=models.CASCADE, related_name='nodes')
        description = models.CharField(max_length=500, null = True, blank = True)

        def __str__(self):
                return self.name

Для этих таблиц y создал представление, которое для созданного плана выводит связанный узел со следующим представлением:

class NodeCreateStructure(LoginRequiredMixin, ListView):
    model = Node        

    def get_queryset(self):
        ## Prefetch hace el join en el return
        return Node.objects.filter(plan_id= self.kwargs['plan_pk']).prefetch_related('plan__type') 

Я хочу вывести таблицу, которая показывает структуру узлов, как в этом примере:

enter image description here

Надеюсь понятно, спасибо большое за помощь!

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