一种多态的mptt结构,用于以树的形式显示内容。
项目描述
django-polymorphic-tree
此包将 django-mptt 与 django-polymorphic 结合。
换句话说,此模块提供了一个节点树,其中每个节点可以是不同的模型类型。这允许您自由地结构化树数据。例如
构建一个根节点、类别节点、叶节点的树,每个节点都有自定义字段。
构建一个项目、类别和条目的待办事项列表。
构建一个章节、部分和页面的书籍。
起源
本模块是从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',
)
用法
本模块的主要功能是创建自定义节点类型的树。这相当于创建一个包含2个文件的应用程序
models.py文件应定义自定义节点类型及其任何字段
from django.db import models
from django.utils.translation import ugettext_lazy as _
from polymorphic_tree.models import PolymorphicMPTTModel, PolymorphicTreeForeignKey
# A base model for the tree:
class BaseTreeNode(PolymorphicMPTTModel):
parent = PolymorphicTreeForeignKey('self', blank=True, null=True, related_name='children', verbose_name=_('parent'))
title = models.CharField(_("Title"), max_length=200)
class Meta(PolymorphicMPTTModel.Meta):
verbose_name = _("Tree node")
verbose_name_plural = _("Tree nodes")
# Create 3 derived models for the tree nodes:
class CategoryNode(BaseTreeNode):
opening_title = models.CharField(_("Opening title"), max_length=200)
opening_image = models.ImageField(_("Opening image"), upload_to='images')
class Meta:
verbose_name = _("Category node")
verbose_name_plural = _("Category nodes")
class TextNode(BaseTreeNode):
extra_text = models.TextField()
# Extra settings:
can_have_children = False
class Meta:
verbose_name = _("Text node")
verbose_name_plural = _("Text nodes")
class ImageNode(BaseTreeNode):
image = models.ImageField(_("Image"), upload_to='images')
class Meta:
verbose_name = _("Image node")
verbose_name_plural = _("Image nodes")
admin.py文件应定义行政,包括子节点和父节点
from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from polymorphic_tree.admin import PolymorphicMPTTParentModelAdmin, PolymorphicMPTTChildModelAdmin
from . import models
# The common admin functionality for all derived models:
class BaseChildAdmin(PolymorphicMPTTChildModelAdmin):
GENERAL_FIELDSET = (None, {
'fields': ('parent', 'title'),
})
base_model = models.BaseTreeNode
base_fieldsets = (
GENERAL_FIELDSET,
)
# Optionally some custom admin code
class TextNodeAdmin(BaseChildAdmin):
pass
# Create the parent admin that combines it all:
class TreeNodeParentAdmin(PolymorphicMPTTParentModelAdmin):
base_model = models.BaseTreeNode
child_models = (
(models.CategoryNode, BaseChildAdmin),
(models.TextNode, TextNodeAdmin), # custom admin allows custom edit/delete view.
(models.ImageNode, BaseChildAdmin),
)
list_display = ('title', 'actions_column',)
class Media:
css = {
'all': ('admin/treenode/admin.css',)
}
admin.site.register(models.BaseTreeNode, TreeNodeParentAdmin)
child_models属性定义了在编辑和删除页面中加载哪个管理界面。列表视图仍然由父管理器渲染。
测试
要运行包含的测试套件,请执行
./runtests.py
要测试对多个Python和Django版本的支持,从仓库根目录运行tox
pip install tox tox
需要在您的系统中安装Python版本。有关pyenv(Linux)或Homebrew(Mac OS X)的更多信息,请参阅。
目前支持Python 2.6、2.7和3.3。
待办事项
Sphinx文档
贡献
本模块旨在通用。如果您对本模块有任何不喜欢的地方,或认为其不够灵活,请告诉我们。我们很高兴改进它!
如果您有任何其他有价值的贡献、建议或想法,也请告诉我们,因为我们将会考虑它。我们也欢迎拉取请求。:-)
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
哈希值 用于 sigmacms_polymorphic_tree-1.2.6b1-py2.py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 256dd2c7ffa495bf907136409fae9ca3cadf53bcfd4338afb83d0784316631ec |
|
MD5 | ea24687b6f9c5e1157c61633c33fa683 |
|
BLAKE2b-256 | 07c6d9cd27816372dc7e9829a60a9371ea70c08018f5654ec5bb93394b58c175 |