mptt使用总结
基本使用流程
- ##### 安装mptt并将
'mptt'加入到settings.py文件中的INSTALLD_APPS中
INSTALLD_APPS = [ # .... 'mptt', ]- ##### 继承
MPTTModels并实现自己的树
from django.db import models from mptt.modles import MPTTModel, TreeForeignKey class Category(object): """docstring for Category""" name = modles.CharField(max_length=50, unique=True) parent = TreeForeignKey( 'self', null=True, blank=True, related_name='children', db_index=True )必须在类中定义parent字段, 并且该字段为指向自己(
self)的TreeForeignKey, 由于Category类继承自MPTTModel, 因此它会默认拥有一些字段,比如level, lft, rght, tree_id# in views.py def show_category(request): return render( request, 'categorues.html', {'nodes': Category.objects.all()} )# in urls.py (r'^Category/$', views.show_category, name='show_category')- 在模板中渲染树
{% load mptt_tags %} <ul> {% recursetree nodes %} <li> {{ node.name }} {% if not node.is_leaf_node %} <ul class='children'> {{ children }} </ul> {% endif %} </li> {% endrecursetree %} </ul>
- ##### 安装mptt并将
模型选项和实例方法
- 创建模型时,由于继承自
MPTTModle,因此模型包含了一些默认字段,但如果你自己定义的字段名字跟这些字段有冲突,可以通过在Meta类中为这些默认字段指定新的名称
这些属性包括left_attr right_attr tree_id_attr level_attr order_insertion_by - 实用的实例方法,在后台可以使用这些实例方法来获取想要的
QuerySet,这些方法包括
# 获取指定节点的祖先节点,默认从根节点开始 get_ancestors(ascending=False, include_self=False) # 获取指定节点的子节点 get_children() # 获取指定节点的后代节点 get_descendants(include_self=False) # 获取根节点 get_root() # 判断节点属性 is_child_node() is_leaf_node() is_root_node()- 创建模型时,由于继承自

本文总结了Django中mptt库的使用,包括安装、模型定义、模板渲染以及模型选项和实例方法。通过继承MPTTModel,我们可以方便地创建和操作树形结构的数据,同时利用提供的实用方法进行数据查询。
1081

被折叠的 条评论
为什么被折叠?



