在树中显示内容的多态mptt结构。
sigmacms-polymorphic-tree的Python项目详细描述
django多态树
这个包结合了django-mptt和django-polymorphic。
换句话说,这个模块提供了一个节点树,每个节点可以是不同的模型类型。 这允许您自由地构造树数据。例如:
- 构建根节点、类别节点、叶节点的树,每个节点都有自定义字段。
- 生成项目、类别和项的TOdo列表。
- 建立一本包含章节、章节和页面的书。
起源
这个模块是从django-fluent-pages中提取出来的,因为它原来是用于一般用途的。 这是在Leukeleu(也以参与django-fiber)的合同工作期间完成的。
安装
首先,最好在虚拟环境中安装模块:
pip install django-polymorphic-tree
或者安装当前存储库:
pip install -e git+https://github.com/edoburu/django-polymorphic-tree.git#egg=django-polymorphic-tree
主要依赖关系是django-mptt和django-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属性定义为edit和delete页加载哪个管理接口。 列表视图仍由父管理员呈现。
测试
要运行包含的测试套件,请执行:
./runtests.py
要测试对多个python和django版本的支持,请从存储库根目录运行tox:
pip install tox tox
python版本需要安装在您的系统中。请参见pyenv(Linux)或自制(Mac OS X)。
python 2.6、2.7和3.3是当前支持的版本。
待办事项
- Sphinx文档
贡献
本模块设计为通用模块。万一你有什么不喜欢的, 或者认为它不够灵活,请让我们知道。我们很乐意改进它!
如果你有其他有价值的贡献、建议或想法, 请也让我们知道,因为我们会调查的。 也欢迎拉取请求。:-)