如何使用django-treebeard实现树类型存储与编辑

 更新时间:2024年08月05日 09:03:49   作者:程序设计实验室  
这篇文章主要介绍了使用django-treebeard实现树类型存储与编辑的宣相关操作代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

前言

其实之前做很多项目都有遇到跟树相关的功能,以前都是自己实现的,然后前端很多UI组件库都有Tree组件,套上去就可以用。

不过既然用 Django 了,还是得充分发挥一下生态的优势,但是我找了半天,也就这个 treebeard 能用,其他要不停更了要不就功能很拉,没有可视化编辑树的功能。

难道Django已经没落了?

效果

以这个汽车改装项目为例

实现以下效果,可以拖动节点进行编辑

安装

安装依赖

pdm add django-treebeard

将 treebeard 添加到 INSTALLED_APPS

定义model

继承 MP_Node 类型就可以

from treebeard.mp_tree import MP_Node
class CaseCategory(MP_Node):
    name = models.CharField('类别名称', max_length=100)
    node_order_by = ['name']
    def __str__(self):
        return '改装类别: {}'.format(self.name)
    class Meta:
        db_table = 'car_case_category'
        verbose_name = '改装类别'
        verbose_name_plural = verbose_name

配置 admin

需要继承 TreeAdmin 才能实现可视化的树编辑

from treebeard.admin import TreeAdmin
@admin.register(CaseCategory)
class CaseCategoryAdmin(TreeAdmin):
    form = movenodeform_factory(CaseCategory)
    list_display = ['name', 'depth']
    search_fields = ['name']

初始化数据

可以使用代码把初始化的Tree数据导入

(事实上是因为不先导入初始化数据,admin界面连个添加按钮都没有……估计是bug)

def seed_data_treebeard():
    from apps.car.models import CaseCategory
    get = lambda node_id: CaseCategory.objects.get(pk=node_id)
    root = CaseCategory.add_root(name='车衣')
    node = get(root.pk).add_child(name='亮面/光面')
    node = get(root.pk).add_child(name='磨砂/哑光')
    root = CaseCategory.add_root(name='改色')
    get(root.pk).add_child(name='纯色系')
    get(root.pk).add_child(name='渐变色')
    get(root.pk).add_child(name='定制彩绘')
    root = CaseCategory.add_root(name='改装')
    get(root.pk).add_child(name='轮毂')
    get(root.pk).add_child(name='刹车')
    get(root.pk).add_child(name='避震')
    root = CaseCategory.add_root(name='省心提')

这样打开admin界面就可以看到了

算是能用吧

写个接口

然后我再写个简单的接口,基于 django-ninja

(实际上这些代码是 DjangoStarter 自动生成的)

from typing import List
from django.shortcuts import get_object_or_404
from ninja import Router, ModelSchema
from django_starter.http.response import responses
router = Router(tags=['case_category'])
class CaseCategoryOut(ModelSchema):
    class Meta:
        model = CaseCategory
        fields = ['id', 'path', 'depth', 'numchild', 'name', ]
@router.get('/', response=List[CaseCategoryOut], url_name='car/case_category/list')
def list_items(request):
    qs = CaseCategory.objects.all()
    return qs

结果出来的数据是这样(省略部分数据)

{
  "code": 200,
  "data": [
    {
      "id": 4,
      "path": "0001",
      "depth": 1,
      "numchild": 3,
      "name": "改色"
    },
    {
      "id": 7,
      "path": "00010001",
      "depth": 2,
      "numchild": 0,
      "name": "定制彩绘"
    },
    {
      "id": 6,
      "path": "00010002",
      "depth": 2,
      "numchild": 0,
      "name": "渐变色"
    }
  ]
}

小结

还是自己实现的舒服。

不过这个也算是开箱即用了,小项目的话随便搞搞还是可以的。

参考资料

到此这篇关于使用django-treebeard实现树类型存储与编辑的文章就介绍到这了,更多相关django-treebeard树类型存储与编辑内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python闭包执行时值的传递方式实例分析

    Python闭包执行时值的传递方式实例分析

    这篇文章主要介绍了Python闭包执行时值的传递方式,结合实例形式分析了Python闭包执行时的传值原理与实现方式,代码中包含了较为详尽的注释便于理解,需要的朋友可以参考下
    2018-06-06
  • python 命令行传入参数实现解析

    python 命令行传入参数实现解析

    这篇文章主要介绍了python 命令行传入参数实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 使用Python读取和修改Excel文件(基于xlrd、xlwt和openpyxl模块)

    使用Python读取和修改Excel文件(基于xlrd、xlwt和openpyxl模块)

    本文介绍一下使用Python对Excel文件的基本操作,包括使用xlrd模块读取excel文件,使用xlwt模块将数据写入excel文件,使用openpyxl模块读取写入和修改excel文件,需要的朋友可以参考下
    2021-11-11
  • Ubuntu配置Pytorch on Graph (PoG)环境过程图解

    Ubuntu配置Pytorch on Graph (PoG)环境过程图解

    这篇文章主要介绍了Ubuntu配置Pytorch on Graph (PoG)环境过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 基于pyinstaller超级加密操作(加壳和转c)

    基于pyinstaller超级加密操作(加壳和转c)

    这篇文章主要介绍了基于pyinstaller超级加密操作 (加壳和转c),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Django 允许局域网中的机器访问你的主机操作

    Django 允许局域网中的机器访问你的主机操作

    这篇文章主要介绍了Django 允许局域网中的机器访问你的主机实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python之流程控制语句match-case详解

    python之流程控制语句match-case详解

    这篇文章主要介绍了python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Gradio机器学习模型快速部署工具应用分享前篇

    Gradio机器学习模型快速部署工具应用分享前篇

    这篇文章主要为大家介绍了Gradio机器学习模型快速部署工具应用分享前篇,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 利用Python判断你的密码难度等级

    利用Python判断你的密码难度等级

    很多网站在用户注册账号的时候为了保证账户的安全,都会自动检测用户密码的强度并给出提醒让用户设置一个相对安全的密码。这篇文章主要给大家介绍了关于利用Python判断你的密码难度等级,需要的朋友可以参考下
    2021-06-06
  • 如何使用python docx模块操作word文档

    如何使用python docx模块操作word文档

    这篇文章主要介绍了如何使用python docx模块操作word文档,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09

最新评论