用于在树形结构中显示内容的多态mptt结构。
项目描述
django-polymorphic-tree
此软件包将 django-mptt 与 django-polymorphic 结合。您可以为形成树结构的Django模型编写,其中每个节点可以是一个不同的模型类型。
示例用法
构建组织和公司类型的树(例如 合作伙伴、经销商、组 和 客户)
构建根节点、分类节点、叶子节点,每个节点都有自定义字段。
构建项目、分类和条目的待办事项列表。
构建章节、节和页面的书籍。
起源
此代码是在 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-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 gettext_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 gettext_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,
models.TextNode, # custom admin allows custom edit/delete view.
models.ImageNode,
)
list_display = ('title', 'actions_column',)
class Media:
css = {
'all': ('admin/treenode/admin.css',)
}
admin.site.register(models.CategoryNode, BaseChildAdmin)
admin.site.register(models.TextNode, TextNodeAdmin)
admin.site.register(models.ImageNode, BaseChildAdmin)
admin.site.register(models.BaseTreeNode, TreeNodeParentAdmin)
child_models 属性定义了用于 编辑 和 删除 页面的管理界面。列表视图仍由父管理渲染。
测试
要运行包含的测试套件,执行
./runtests.py
要测试对多个 Python 和 Django 版本的支持,您需要遵循以下步骤
在虚拟环境中安装项目需求
通过 pyenv 安装 python 2.7、3.4、3.5、3.6 版本的 python(参见 pyenv(Linux)或 Homebrew(Mac OS X))。
创建 .python-version 文件并添加要测试的项目必须使用的所有已安装版本的全列表,例如
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 文档
贡献
此模块旨在通用。如果您对它有任何不喜欢的地方,或者认为它不够灵活,请告诉我们。我们愿意改进它!
如果您有任何其他有价值的贡献、建议或想法,也请告诉我们,因为我们将对其进行调查。我们也欢迎拉取请求。:-)
项目详细信息
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
哈希值 for django_polymorphic_tree-2.1-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6e2994ea0d96b0c9e4191e57998e54fcbfafd4362ed2afc877ef61a2548d39f0 |
|
MD5 | f18d0492fe1ea5d2a6edf15c0bc4e1c7 |
|
BLAKE2b-256 | 013237fe15ca3ed947d52d720f7fa3015015201131899997d2558e4229228af5 |