17

我正在使用 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

4 回答 4

21

为我工作:

MenuItem.objects.rebuild()
于 2014-09-09T22:27:57.333 回答
20

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

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

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

正确的用法是:

MyObj.tree.rebuild() 文档链接

这将构建 MyObj 树。

于 2011-04-09T01:47:59.317 回答
6

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

MyObj._tree_manager.rebuild()
于 2015-06-16T16:02:47.760 回答
4

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

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

MyObj.tree.partial_rebuild(tree_id).

于 2012-11-18T20:40:25.210 回答