How do I rebuild my django-mptt tree?

Hobhouse picture Hobhouse · Apr 4, 2011 · Viewed 11.1k times · Source

I'm using django-mptt 0.4.2, and want to rebuild a tree.

The tree manager has a method rebuild() which I try to access like this:

>>> my_rootnode = MyObj.objects.get(id=12)
>>> my_rootnode.tree.rebuild()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py", line 211, in __get__
    raise AttributeError("Manager isn't accessible via %s instances" % type.__name__)
AttributeError: Manager isn't accessible via MyObj instances

I'm obviously doing this wrong. How should I access the rebuild method?

Answer

manji picture manji · Apr 9, 2011

AttributeError: Manager isn't accessible via MyObj instances

mptt Manager inherits from django.db.models.Manager which can not be accessed via model instances but only via model classes. More infos:Retrieving objects

The model class here is MyObj. You are using a model instance my_rootnode

the correct usage is:

MyObj.tree.rebuild() (documentation link)

this will build MyObj tree.