Simple way to create, persist and manipulate reliable tree structures using Django models.
pip install django-trees
To create a model extend AbstractNode
and add desired fields.
from django.db import models
from django_trees.models import AbstractNode
class Folder(AbstractNode):
name = models.CharField(max_length=10)
To create a tree node, there is nothing different than creating a normal Django model other than you may specify a parent node.
root = Folder.objects.create(name="Root")
documents = Folder.objects.create(name="Documents", parent=root)
downloads = Folder.objects.create(name="Downloads", parent=root)
projects = Folder.objects.create(name="Projects", parent=documents)
To retrieve all of the descendants of a node (including children, grandchildren, great grandchildren, etc) use the get_descendants
method. This method will return a flat list of node objects.
root.get_descendants()
To retrieve all of the ancestors of a node (including parents, grandparents, great grandparents, etc) use the get_ancestors
method. This method will return a flat list of node objects.
projects.get_ancestors()
To retrieve all immediate children of the current node use the get_children
method. This method will return a flat list of node objects.
projects.get_children()
To move a node to a different position in the tree use the move
method passing the new parent node as an argument.
projects.move(root)
To create a separate tree from a branch of an existing tree use the bifurcate
method. The node object will be removed from the previous tree and it along with its descendants will now be in a new tree.
projects.bifurcate()
To get an ascii representation of the tree structure use the get_ascii_tree
method.
projects.get_ascii_tree()