什么是django-mptt?

django-mptt是一个可复用的django app, 旨在让你自己的django项目模型使用MPTT更加简单。它负责将数据库表作为树型结构管理的详细信息,并提供用于处理树型模型实例的工具

对于mptt模型算法实现不了解的可以先看一下此文档 https://www.ibase.ru/files/articles/programming/dbmstrees/sqltrees.html

安装和文档

pip install django-mptt
# 依赖安装包django

github地址:https://github.com/django-mptt/django-mptt

document:https://django-mptt.readthedocs.io/

一般模型

from django.db import models
from mptt.models import MPTTModel, TreeForeignKey class Genre(MPTTModel):
name = models.CharField(max_length=50, unique=True)
parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children')

因为MPTTModel继承自models.Model,当你的模型需要使用多继承时,请务必将MPTTModel放在最前面,这里跟django的mixin很相似。

MPTTMeta参数

1、parent_attr 默认为“parent”。将模型关联回自身的字段的名称,这样每个实例都可以是另一个实例的子实例。用户需要在模型上定义此字段如上示例的parent字段

2、left_attr 默认名称"lft"。表示树型模型字段左边的节点数字,字段类型为PositiveIntegerField

3、right_attr 默认名称"rght"。表示树型模型字段右边的节点数字,字段类型为PositiveIntegerField

4、tree_id_attr 默认名称"tree_id"。表示包含每个节点的树ID的字段的名称

5、level_attr 默认名称"level"。表示每个节点所在的树形结构的层级

6、order_insertion_by 默认值[ ]。当插入新的树节点或重新创建现有节点时,应定义排序的字段名列表,首先是最重要的排序字段名

一般实例

根据上面的模型,生成数据库

python manage.py makemigrations

python manage.py migrate

定义测试路由

urlpatterns = [
path('genres/', views.test_mptt),
]

定义测试视图

from django.shortcuts import render
from mptt_test.models import Genre # Create your views here. def test_mptt(request):
return render(request, 'genre.html', {'genres': Genre.objects.all()})

测试模板渲染

{% load mptt_tags %}
<ul>
{% recursetree genres %}
<li>
{{ node.name }}
{% if not node.is_leaf_node %}
<ul class="children">
{{ children }}
</ul>
{% endif %}
</li>
{% endrecursetree %}
</ul>

此时启动django shell 插入数据(或者python console也行)

python manage.py shell
from test_mptt.models import Genre
dandy = Genre.objects.create(name='dandy')
elina = Genre.objects.create(name='elina')
cathy = Genre.objects.create(name='cathy')
Genre.objects.create(name='aaa', parent=dandy)
Genre.objects.create(name='bbb', parent=elina)
Genre.objects.create(name='ccc', parent=cathy)

效果图

MPTT模型实例方法

get_ancestors(ascending=False, include_self=False)  # 返回一个包含所有当前实例祖宗的queryset

get_children()  # 返回包换当前实例的直接孩子的queryset(即下一级所有的子节点),按树序排列

get_descendants(include_self=False)  # 返回当前实例的所有子节点,按树序排列

get_descendant_count()  # 返回当前实例所有子节点的数量

get_family()  # 返回从当前实例开始的所有家庭成员节点,用树型结构

get_next_sibling()  # 返回当前实例的下一个树型同级节点的实例

get_previous_sibling()  # 返回当前实例的上一个树型同级节点的实例

get_root()  # 获取当前实例的根节点实例

get_siblings(include_self=False)  # 获取所有同级兄弟节点的实例的queryset

insert_at(target, position='first-child', save=False)  # 插入作为目标节点的第一个子节点(如果save=True)

is_child_node()  # 是否是子节点
is_leaf_node() # 是否是叶节点
is_root_node() # 是否是根节点
move_to(target, position='first-child') # 移动到某个节点的第一个子节点位置,target为空将会被移到根节点,此时不需要position位置参数 position位置参数:
'first-child', 'last-child','left', 'right'

树形结构模型Django-MPTT的更多相关文章

  1. R--基本统计分析方法(包及函数)

    摘要:目前经典的统计学分析方法主要有回归分析,Logistic回归,决策树,支持向量机,聚类分析,关联分析,主成分分析,对应分析,因子分析等,那么对于这些经典的分析方法在R中的使用主要有那些程序包及函 ...

  2. 《R包的分类介绍》

    R分析空间数据(Spatial Data) R机器学习包(Machine Learning) R多元统计包(Multivariate Statistics) R药物(代谢)动力学数据分析包 R计算计量 ...

  3. R语言︱常用统计方法包+机器学习包(名称、简介)

    一.一些函数包大汇总 转载于:http://www.dataguru.cn/thread-116761-1-1.html 时间上有点过期,下面的资料供大家参考基本的R包已经实现了传统多元统计的很多功能 ...

  4. ML—机器学习常用包(持续更新….)

    机器学习是计算机科学和统计学的边缘交叉领域,R关于机器学习的包主要包括以下几个方面: 1)神经网络(Neural Networks): nnet.AMORE以及neuralnet,nnet提供了最常见 ...

  5. R语言常用包汇总

    转载于:https://blog.csdn.net/sinat_26917383/article/details/50651464?locationNum=2&fps=1 一.一些函数包大汇总 ...

  6. R语言中的机器学习包

    R语言中的机器学习包   Machine Learning & Statistical Learning (机器学习 & 统计学习)  网址:http://cran.r-project ...

  7. 联邦学习(Federated Learning)

    联邦学习简介        联邦学习(Federated Learning)是一种新兴的人工智能基础技术,在 2016 年由谷歌最先提出,原本用于解决安卓手机终端用户在本地更新模型的问题,其设计目标是 ...

  8. 论一种基于JS技术的WEB前端动态生成框图的方法

    前言 HTML是一种标记语言,由HTML的标签元素和文本编写的文档可被浏览器描述为一幅网页.通常情况下网页的实现是由HTML.CSS和Javascript三者结合完成的,HTML负责网页的结构,CSS ...

  9. 《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”

    <Machine Learning in Action>-- Taoye给你讲讲决策树到底是支什么"鬼" 前面我们已经详细讲解了线性SVM以及SMO的初步优化过程,具体 ...

随机推荐

  1. 深入研究 Mini ASP.NET Core(迷你 ASP.NET Core),看看 ASP.NET Core 内部到底是如何运行的

    前言 几年前,Artech 老师写过一个 Mini MVC,用简单的代码告诉读者 ASP.NET MVC 内部到底是如何运行的.当时我研究完以后,受益匪浅,内心充满了对 Artech 老师的感激,然后 ...

  2. git 添加、提交、推送

    只添加本地修改的一个文件 如,只添加package.json一个文件 git add package.json git commit -m "修改qa环境版本号" git push ...

  3. FLIR 相机采集程序

    https://www.ptgrey.com/Downloads/GetSecureDownloadItem/11048 Grasshopper3 4.1 MP Mono USB3 Vision (C ...

  4. matlab函数int2str, num2str, str2num

    函数名:int2str 功能:将整数值转换为字符串 输入格式:str = int2str(N) 备注:就将该值四舍五入后转换为字符串,接受向量和矩阵输入. 如果是向量和矩阵输入,列数字之间会补加两个空 ...

  5. Vue.Draggable 文档总结

    本文章转自https://blog.csdn.net/zjiang1994/article/details/79809687 Vue.Draggable学习总结 Draggable为基于Sortabl ...

  6. c++ 指针做为参数和返回值

    指针参数 返回值是指针 一.指针作参数形式的函数 //计算x的平方 x*x void square(int *x) { int a=*x; *x=a*a; } 二.指针作返回值的函数 int *squ ...

  7. myeclipse新建javaweb项目,并部署到tomcat

    myeclipse使用的版本: 新建web项目: File-->New-->Web Project,输入项目名称,选择J2EE规范. 完成后: JRE System Library是只要做 ...

  8. shell脚本实现并发控制

    ++++++++++++++++++++++++++++++++++++++++++++++++++标题:shell脚本实现并发控制内容:以ping测试主机存活为例,讲述如何通过命名管道文件以及描述符 ...

  9. vue keepalive 动态设置缓存

    场景:A首页.B列表页.C详情页B---->C 缓存‘列表1’详情的数据A---->C 读取‘列表1’详情的数据B---->C (希望清除‘列表1’的缓存,变成缓存‘列表2’详情的数 ...

  10. 安装Cnario Player 3.8.1.156或其他版本时提示"Warning 4154. Adobe Flash Player 13 ...not correctly installed"

    错误提示 安装Cnario Player 3.8.1.156或其他版本时, 有时会出现如下提示: Warning 4154. Adobe Flash Player 13 ...not correctl ...