Admin¶
API¶
- class treebeard.admin.TreeAdmin(*args, **kwargs)¶
Bases:
ModelAdminDjango 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 TreeAdmin class provides a lazy-loaded, drag and drop interface
for working with trees. It efficiently loads the top level of the tree
and allows expanding nodes to reveal their children.
Warning
TreeAdmin does not support list_editable fields, because of how the data is loaded. This parameter
will be ignored if it is set.
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.