django django-mptt

¿Cómo reconstruyo mi árbol django-mptt?



(4)

Estoy usando django-mptt 0.4.2, y quiero reconstruir un árbol.

El administrador de árbol tiene un método rebuild () al que trato de acceder de esta manera:

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

Obviamente estoy haciendo esto mal. ¿Cómo debo acceder al método de reconstrucción?


AttributeError: Manager no es accesible a través de instancias de MyObj

mptt Manager hereda de django.db.models.Manager que no se puede acceder a través de instancias de modelos, sino solo a través de clases de modelos. Más infos: Retrieving objects

La clase modelo aquí es MyObj . Estás usando una instancia de modelo my_rootnode

El uso correcto es:

MyObj.tree.rebuild() ( enlace de documentación )

esto construirá el árbol MyObj.


La versión reciente de MPTT parece requerir el siguiente comando. Al menos funcionó para mí hoy, aunque el guión al frente indica que el administrador del árbol es privado y que probablemente no debería accederse directamente:

MyObj._tree_manager.rebuild()


manji tiene razón, necesitas usar la clase modelo para llamar a la reconstrucción.

Sin embargo, si desea reconstruir el árbol solo para un objeto específico y sus descendientes, puede usar:

MyObj.tree.partial_rebuild(tree_id) .


trabaja para mi:

MenuItem.objects.rebuild()