def get_nodes_and_edges(name='my_graph'): graph = Graph(cleanup(name)) edges = [] for orm_node in Node.objects.select_related(): graph.add_node(get_node(orm_node.name)) for parent in orm_node.parent.iterator(): edges.append((cleanup(parent.parent.name),cleanup(parent.child.name))) for child in orm_node.child.iterator(): edges.append((cleanup(child.parent.name),cleanup(child.child.name))) edges = list(set(edges)) # remove duplicates for edge in edges: e = Edge(edge[0],edge[1]) e.set_target('_parent') e.set_arrowhead('vee') graph.add_edge(e) return graph