I have the following models in python:
class ModuleType(models.Model):
name = models.CharField(max_length=150, unique=True)
icon = models.CharField(max_length=100, unique=True)
state = models.IntegerField(choices=state_choices, default=1)
def __str__(self):
return '%s' % (self.name)
class Module(models.Model):
url = models.CharField(max_length=100,verbose_name='Url',unique=True)
name = models.CharField(max_length=100,verbose_name='Nombre',unique=True)
description = models.CharField(max_length=200, null=True,blank=True,verbose_name='Descripción')
icon = models.CharField(max_length=100,verbose_name='Icono',null=True,blank=True,unique=True)
image = models.ImageField(upload_to='modulo/%Y/%m/%d',verbose_name='Imagen',null=True,blank=True)
type = models.ForeignKey(ModuleType,null=True,blank=True)
dropdown = models.BooleanField(default=True,verbose_name='Despegable')
state = models.IntegerField(choices=state_choices, default=1,verbose_name='Estado')
def __str__(self):
return '%s' % (self.name)
I have the following function in python:
def generate_treeview(id):
data = {}
modules = Module.objects.filter(groupmodule__groups_id=2, state=1, dropdown=True).exclude(type=None)
for t in ModuleType.objects.filter(state=1,module__in=list(modules.values_list(flat=True))):
data[t] = modules.filter(type=t)
return data
It gives me the result if I print the following:
{<ModuleType: Seguridad>: <QuerySet [<Module: Tipos de Módulos>, <Module: Módulos>, <Module: Grupos>]>, <ModuleType: Publicidad>: <QuerySet [<Module: Portadas>]>}
How do I iterate it in a template? I did it in the following way but it works for me.
{% for t in rmoduletreev %}
<li class="treeview">
<a href="#">
<i class="{{ t.icon }}" aria-hidden="true"></i> <span class="text-right-treeview">{{ t.name }}</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
{% for mod in t.objects.all %}
<li><a href="{{ mod.url }}"><i class="{{ mod.icon }}"></i> {{ mod.name }}</a></li>
<p>{{ value }}</p>
{% endfor %}
</ul>
</li>
{% endfor %}