在树中显示内容的多态mptt结构。

django-polymorphic-tree的Python项目详细描述


https://img.shields.io/travis/django-polymorphic/django-polymorphic-tree/master.svg?branch=masterhttps://img.shields.io/pypi/v/django-polymorphic-tree.svghttps://img.shields.io/badge/wheel-yes-green.svghttps://img.shields.io/pypi/l/django-polymorphic-tree.svghttps://img.shields.io/codecov/c/github/django-polymorphic/django-polymorphic-tree/master.svg

django多态树

这个包结合了django-mpttdjango-polymorphic。 您可以编写django模型,形成树结构,其中每个节点可以是不同的模型类型。

示例用法:

  • 建立一个组织和公司类型树(例如PartnerResellerGroupCustomer
  • 构建根节点、类别节点、叶节点的树,每个节点都有自定义字段。
  • 生成项目、类别和项的TOdo列表。
  • 建立一本包含章节、章节和页面的书。

起源

这段代码是在django-fluent-pages中创建的,并被提取为一个单独的包。 这是在Leukeleu(以django-fiber闻名)的合同工作期间完成的。

安装

首先,最好在虚拟环境中安装模块:

pip install django-polymorphic-tree

或者安装当前存储库:

pip install -e git+https://github.com/django-polymorphic/django-polymorphic-tree.git#egg=django-polymorphic-tree

主要依赖关系是django-mpttdjango-polymorphic, 将自动安装。

配置

接下来,创建一个使用应用程序的项目:

cd ..
django-admin.py startproject demo

将以下内容添加到settings.py

INSTALLED_APPS+=('polymorphic_tree','polymorphic','mptt',)

使用量

此模块的主要功能是创建自定义节点类型树。 它可以归结为创建一个包含两个文件的应用程序:

models.py文件应定义自定义节点类型及其所有字段:

fromdjango.dbimportmodelsfromdjango.utils.translationimportugettext_lazyas_frompolymorphic_tree.modelsimportPolymorphicMPTTModel,PolymorphicTreeForeignKey# A base model for the tree:classBaseTreeNode(PolymorphicMPTTModel):parent=PolymorphicTreeForeignKey('self',blank=True,null=True,related_name='children',verbose_name=_('parent'))title=models.CharField(_("Title"),max_length=200)classMeta(PolymorphicMPTTModel.Meta):verbose_name=_("Tree node")verbose_name_plural=_("Tree nodes")# Create 3 derived models for the tree nodes:classCategoryNode(BaseTreeNode):opening_title=models.CharField(_("Opening title"),max_length=200)opening_image=models.ImageField(_("Opening image"),upload_to='images')classMeta:verbose_name=_("Category node")verbose_name_plural=_("Category nodes")classTextNode(BaseTreeNode):extra_text=models.TextField()# Extra settings:can_have_children=FalseclassMeta:verbose_name=_("Text node")verbose_name_plural=_("Text nodes")classImageNode(BaseTreeNode):image=models.ImageField(_("Image"),upload_to='images')classMeta:verbose_name=_("Image node")verbose_name_plural=_("Image nodes")

admin.py文件应该为子节点和父节点定义管理:

fromdjango.contribimportadminfromdjango.utils.translationimportugettext_lazyas_frompolymorphic_tree.adminimportPolymorphicMPTTParentModelAdmin,PolymorphicMPTTChildModelAdminfrom.importmodels# The common admin functionality for all derived models:classBaseChildAdmin(PolymorphicMPTTChildModelAdmin):GENERAL_FIELDSET=(None,{'fields':('parent','title'),})base_model=models.BaseTreeNodebase_fieldsets=(GENERAL_FIELDSET,)# Optionally some custom admin codeclassTextNodeAdmin(BaseChildAdmin):pass# Create the parent admin that combines it all:classTreeNodeParentAdmin(PolymorphicMPTTParentModelAdmin):base_model=models.BaseTreeNodechild_models=((models.CategoryNode,BaseChildAdmin),(models.TextNode,TextNodeAdmin),# custom admin allows custom edit/delete view.(models.ImageNode,BaseChildAdmin),)list_display=('title','actions_column',)classMedia:css={'all':('admin/treenode/admin.css',)}admin.site.register(models.BaseTreeNode,TreeNodeParentAdmin)

child_models属性定义为editdelete页加载哪个管理接口。 列表视图仍由父管理员呈现。

测试

要运行包含的测试套件,请执行:

./runtests.py

要测试对多个python和django版本的支持,需要执行以下步骤:

  • 在虚拟环境中安装项目要求

  • 通过pyenv安装python 2.7、3.4、3.5、3.6版本(请参阅pyenv(Linux)或自制(Mac OS X)。)

  • 创建.python版本文件并添加要测试项目的已安装版本的完整列表,例如:

    2.6.9
    2.7.13
    3.4.5
    3.5.2
    3.6.0
    
  • 从存储库根目录运行tox:

    pip install tox
    tox
    

python 2.7、3.4、3.5和3.6以及django 1.8、1.10和1.11是当前支持的版本。

待办事项

  • Sphinx文档

贡献

本模块设计为通用模块。万一你有什么不喜欢的, 或者认为它不够灵活,请让我们知道。我们很乐意改进它!

如果你有其他有价值的贡献、建议或想法, 请也让我们知道,因为我们会调查的。 也欢迎拉取请求。:-)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java NIO选择器最多只能选择50个SelectionKeys?   java阻止ImageButton创建新活动   为什么Java方法“Arrays.copyOf”处理中的整数数组与处理对象数组时的行为不同   java将安卓 1.6日历字段提取到vcal   将字符串转换为双精度后的java问题   java使用Webflux,是否可以使用AOP获取用于日志记录的ServerHttpRequest   java与jTextArea的基本区别是什么。setText()和jTextArea。append()方法?   java程序执行时间|将值保存到文件或数据结构?   java如何将表示字符的整数转换为字符串?   Java LWJGL新的渲染问题windows   java GUI提供异常   java创建第二个对象使类的函数不再工作   如何在java中将000验证为3位数字?   java bigO算法的时间复杂度,可以在不重复的情况下找到最长的子串   在30像素内点击按钮后,java在两个图像之间转换   java eclipse maven nexus不可解父pom   当存在其他SecurityConstraint时,java TransportGuary机密将被忽略   重新连接后激发的java Red5客户端流断开事件   javafx聊天应用程序中连接客户端的java问题