# Pastebin OeIjALuj # Model class Node(models.Model): hostname = models.CharField(max_length=255, unique=True) #-- CUT FOR BREVITY -- site = models.ForeignKey(Site, on_delete=models.SET_NULL, null=True) class Site(models.Model): name = models.CharField(max_length=255, unique=True) #-- CUT FOR BREVITY -- def __str__(self): return self.name # View class IndexView(LoginRequiredMixin, generic.ListView): template_name = "nodes/index.djhtml" context_object_name = 'all_nodes' def get_queryset(self): return Node.objects.all() # Template {% extends 'base/base.djhtml' %} {% block content %} #-- CUT FOR BREVITY -- {% if all_nodes %} {% regroup all_nodes by site as nodes %} {% for site in nodes %}

site {{ nodes.grouper }}

{% for node in nodes.list %} {% endfor %}
# hostname driver group
{{ node.id }} {{ node.hostname }} {{ node.driver }} {{ node.group.name }}
{% endfor %} {% else %}

no nodes available

{% endif %} {% endblock %}