跳转到主要内容

一种多态的mptt结构,用于以树的形式显示内容。

项目描述

django-polymorphic-tree

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

此包将 django-mpttdjango-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-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 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.tar.gz (39.5 kB 查看哈希)

上传时间

构建分发

sigmacms_polymorphic_tree-1.2.6b1-py2.py3-none-any.whl (47.1 kB 查看哈希)

上传时间 Python 2 Python 3

由以下提供支持