如何重建我的django-mptt树?

时间:2011-04-04 16:27:36

标签: django django-mptt

我正在使用django-mptt 0.4.2,并希望重建一棵树。

树管理器有一个方法rebuild()我试图像这样访问:

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

我显然做错了。我该如何访问重建方法?

4 个答案:

答案 0 :(得分:20)

  

AttributeError:无法通过MyObj访问管理器   实例

mptt Manager继承自django.db.models.Manager,不能通过模型​​实例访问,只能通过模型​​类访问。更多信息:Retrieving objects

这里的模型类是MyObj。您正在使用模型实例my_rootnode

正确的用法是:

MyObj.tree.rebuild() (documentation link)

这将构建MyObj树。

答案 1 :(得分:12)

为我工作:

MenuItem.objects.rebuild()

答案 2 :(得分:5)

manji确实是对的,你需要使用模型类来调用rebuild。

但是,如果只想为特定对象及其后代重建树,可以使用:

MyObj.tree.partial_rebuild(tree_id)

答案 3 :(得分:5)

最近的MPTT版本似乎需要以下命令。至少它今天对我有用,虽然前面的破折号表示树管理器是私有的,可能不应该直接访问:

MyObj._tree_manager.rebuild()