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 インスタンス経由で Manager にアクセスできません

mptt Managerモデルインスタンスdjango.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 is indeed right, you need to use the model class to call rebuild.

However, if you want to rebuild the tree only for a specific object and its descendants, you can use :

MyObj.tree.partial_rebuild(tree_id).

于 2012-11-18T20:40:25.210 に答える