Admin

API

class treebeard.admin.TreeAdmin(model, admin_site)

Bases: ModelAdmin

Django Admin class for treebeard.

Example:

from django.contrib import admin
from treebeard.admin import TreeAdmin
from treebeard.forms import movenodeform_factory
from myproject.models import MyNode

class MyAdmin(TreeAdmin):
    form = movenodeform_factory(MyNode)

admin.site.register(MyNode, MyAdmin)
treebeard.admin.admin_factory(form_class)

Dynamically build a TreeAdmin subclass for the given form class.

Parameters:

form_class

Returns:

A TreeAdmin subclass.

Interface

The features of the admin interface will depend on the tree type.

Advanced Interface

Materialized Path and Nested Sets trees have an AJAX interface based on FeinCMS, that includes features like drag&drop and an attractive interface.

_images/treebeard-admin-advanced.png

Basic Interface

Adjacency List trees have a basic admin interface.

_images/treebeard-admin-basic.png

Model Detail Pages

If a model’s field values are modified, then it is necessary to add the fields ‘treebeard_position’ and ‘treebeard_ref_node_id’. Otherwise, it is not possible to create instances of the model.

Example:

class MyAdmin(TreeAdmin):
    list_display = ('title', 'body', 'is_edited', 'timestamp', 'treebeard_position', 'treebeard_ref_node_id',)
    form = movenodeform_factory(MyNode)

admin.site.register(MyNode, MyAdmin)

Foreign keys and One-to-one relationships

If your project contains models that have a foreign key or one-to-one relationship with a tree model, you can leverage TreeNodeChoiceField to display the choices nicely in the Django admin. Given the following models:

class TreeNode(MP_Node):
    ...

class RelatedModel(models.Model):
    tree_node = models.ForeignKey("TreeNode")

You can configure the admin form for RelatedModel as follows for it to render the choices for tree_node in a nested list:

class RelatedModelAdminForm(forms.ModelForm):
    tree_node = TreeNodeChoiceField(queryset=TreeNode.objects.all())

class RelatedModelAdmin(admin.ModelAdmin):
    form = RelatedModelAdminForm

admin.site.register(MyNode, MyAdmin)

Warning

TreeNodeChoiceField should not be used with AL nodes, because they cannot be queried efficiently in this context.