mptt总结

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>

  • 模型选项和实例方法 
    • 创建模型时,由于继承自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()
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值