跳转到主要内容

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

项目描述

django-polymorphic-tree

https://github.com/django-polymorphic/django-polymorphic-tree/actions/workflows/tests.yaml/badge.svg?branch=master https://img.shields.io/pypi/v/django-polymorphic-tree.svg https://img.shields.io/pypi/l/django-polymorphic-tree.svg https://img.shields.io/codecov/c/github/django-polymorphic/django-polymorphic-tree/master.svg

此软件包将 django-mpttdjango-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-mpttdjango-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 文档

贡献

此模块旨在通用。如果您对它有任何不喜欢的地方,或者认为它不够灵活,请告诉我们。我们愿意改进它!

如果您有任何其他有价值的贡献、建议或想法,也请告诉我们,因为我们将对其进行调查。我们也欢迎拉取请求。:-)

项目详细信息


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

django-polymorphic-tree-2.1.tar.gz (144.3 kB 查看哈希值)

上传时间

构建分发

django_polymorphic_tree-2.1-py3-none-any.whl (159.2 kB 查看哈希值)

上传于 Python 3

由以下机构支持