from django.http import HttpResponse from django.views.generic import ListView from wiki_groups.models import WikiGroup def dot_graph(request): response = HttpResponse(content_type="text/vnd.graphviz") response["Content-Disposition"] = 'attachment; filename="groups.dot"' response.write("digraph {\n") nodes = WikiGroup.objects.values_list("id", "django_group__name") edges = WikiGroup.includes_groups.through.objects.values_list( "to_wikigroup", "from_wikigroup" ) for id, name in nodes: response.write(' {} ["label"="{}"];\n'.format(id, name)) for u, v in edges: response.write(" {} -> {};\n".format(u, v)) response.write("}\n") return response class GroupList(ListView): template_name = "wiki_groups/list.html" model = WikiGroup context_object_name = "groups" def get_queryset(self): return WikiGroup.objects.values_list("id", "django_group__name").order_by( "django_group__name" )