¿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()