Skip to main content

No project description provided

Project description

https://img.shields.io/travis/django-polymorphic/django-polymorphic-tree/master.svg?branch=master https://img.shields.io/pypi/v/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/django-polymorphic/django-polymorphic-tree/master.svg

django-polymorphic-tree-for-garpix-page

Forked from theConscience/django-polymorphic-tree

This package combines django-mptt with django-polymorphic. You can write Django models that form a tree structure where each node can be a different model type.

Example uses:

  • Build a tree of organisation and company types (e.g. Partner, Reseller, Group and Customer)

  • Build a tree of a root node, category nodes, leaf nodes, each with custom fields.

  • Build a todo list of projects, categories and items.

  • Build a book of chapters, sections, and pages.

Origin

This code was created in django-fluent-pages, and extracted to become a separate package. This was done during contract work at Leukeleu (known for django-fiber).

Installation

First install the module, preferably in a virtual environment:

pip install django-polymorphic-tree-for-garpix-page

The main dependencies are django-mptt and django-polymorphic, which will be automatically installed.

Configuration

Next, create a project which uses the application:

cd ..
django-admin.py startproject demo

Add the following to settings.py:

INSTALLED_APPS += (
    'polymorphic_tree',
    'polymorphic',
    'mptt',
)

Usage

The main feature of this module is creating a tree of custom node types. It boils down to creating a application with 2 files:

The models.py file should define the custom node type, and any fields it has:

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")

The admin.py file should define the admin, both for the child nodes and parent:

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)

The child_models attribute defines which admin interface is loaded for the edit and delete page. The list view is still rendered by the parent admin.

Tests

To run the included test suite, execute:

./runtests.py

To test support for multiple Python and Django versions, you need to follow steps below:

  • install project requirements in virtual environment

  • install python 2.7, 3.4, 3.5, 3.6 python versions through pyenv (See pyenv (Linux) or Homebrew (Mac OS X).)

  • create .python-version file and add full list of installed versions with which project have to be tested, example:

    2.6.9
    2.7.13
    3.4.5
    3.5.2
    3.6.0
  • run tox from the repository root:

    pip install tox
    tox

Python 2.7, 3.4, 3.5 and 3.6 and django 1.8, 1.10 and 1.11 are the currently supported versions.

Todo

  • Sphinx Documentation

Contributing

This module is designed to be generic. In case there is anything you didn’t like about it, or think it’s not flexible enough, please let us know. We’d love to improve it!

If you have any other valuable contribution, suggestion or idea, please let us know as well because we will look into it. Pull requests are welcome too. :-)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

File details

Details for the file django-polymorphic-tree-for-garpix-page-2.2.2.tar.gz.

File metadata

  • Download URL: django-polymorphic-tree-for-garpix-page-2.2.2.tar.gz
  • Upload date:
  • Size: 169.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.18

File hashes

Hashes for django-polymorphic-tree-for-garpix-page-2.2.2.tar.gz
Algorithm Hash digest
SHA256 4931b8a905b7bd5320cab89a128d739c1369a1ef843e4c045d7a266093301f8b
MD5 db25e7c309a1a0fb81d0a0a69ffa6612
BLAKE2b-256 c343ea36f9cc0a6f81030e6a0d9a1c8c977294f1ccce34e2aa070a1ca31ceecd

See more details on using hashes here.

File details

Details for the file django_polymorphic_tree_for_garpix_page-2.2.2-py3-none-any.whl.

File metadata

File hashes

Hashes for django_polymorphic_tree_for_garpix_page-2.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a85368a685a7e96f6dd39fddd2b08bd31dd41e41afb47a928ac04cd664c7be9d
MD5 fedc5e5e7778d222ff5c8235a8237e17
BLAKE2b-256 1f6ea84e065c27a322afef9c817bf5342b888d35168d13802a7e5338f1168261

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page