django-treebeard 是一个 Django 扩展,用于实现树形数据结构。它是一个为 Django 的ORM(对象关系映射)提供树形数据结构实现的库。django-treebeard 提供了用于表示树形结构、节点的操作、以及树遍历的 ORM 模型和管理器。
1.安装
1.直接使用pip安装
pip install django-treebeard
2.github离线下载后安装
https://github.com/django-treebeard/django-treebeard/releases
python setup.py install
2.快速上手
1. 为树创建基本模型。在此示例中,我们将使用具体化路径树
from django.db import models
from treebeard.mp_tree import MP_Node
class Category(MP_Node):
name = models.CharField(max_length=30)
node_order_by = ['name']
def __str__(self):
return 'Category: {}'.format(self.name)
2.迁移同步数据库
python manage.py makemigrations
python manage.py migrate
3.创建,删除,新增节点
from models import Category
# 新增根节点
Category.add_root(name='xxx')
# 新增子节点和兄弟节点
node_obj = Category.objects.get(id=1)
node_obj.add_child(name='xxx') # 新增子节点
node_obj.add_sibling(name='xxx') # 新增子节点
#删除节点
node_obj.delete()
#查询相关
#1.获取包含当前节点对象的祖先的查询集,从根节点开始,下降到父节点。(某些子类可能会返回列表)
node_obj.get_ancestors()
#2.获取节点的所有子节点的查询集
node_obj.get_children()
#3.获取节点的子节点数
node_obj.get_children_count()
#4.获取上个或下个同级节点,如果它是最左边/右边 的同级节点,则可以返回节点本身。
node_obj.get_first_sibling()
node_obj.get_last_sibling()
#5.当前节点对象的父节点。
node_obj.get_parent()
#6.当前节点对象的根节点。
node_obj.get_root()
#7.获取当前节点对象的所有同级节点(包括自身)
node_obj.get_siblings()