2011-04-04 14 views
14

私はdjango-mptt 0.4.2を使用しており、ツリーを再構築したいと考えています。私はdjango-mpttツリーをどのように再構築するのですか?

ツリーマネージャは、()私はこのようなアクセスしようとしている方法は、再構築しています

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

私は明らかにこの間違ったをやってるし。どのように再構築メソッドにアクセスすればよいですか?モデルインスタンスを介してのみ、モデルクラスを介してアクセスすることができないdjango.db.models.Managerから

答えて

19

AttributeError: Manager isn't accessible via MyObj instances

mptt Manager継承。その他の情報:Retrieving objects

ここでモデルクラスはMyObjです。あなたはモデルインスタンスを使用しているmy_rootnode

正しい使用方法は次のとおりです。

MyObj.tree.rebuild()(documentation link)

これはこのmyobjツリーを構築します。

5

実際には、モデルクラスを使用して再ビルドを呼び出す必要があります。あなたが唯一の特定のオブジェクトとその子孫のためにツリーを再構築したい場合は

しかし、あなたが使用することができます。

MyObj.tree.partial_rebuild(tree_id)。私にとって

+3

注意を.5。したがって、pip経由でインストールすると、partial_rebuildは使用できなくなります。とにかく、githubから直接masterブランチを使用することができます。これを見てください:https://github.com/django-mptt/django-mptt/issues/250 .. –

+0

これは0.6.0リリースに含まれています。 – chhantyal

11

作品:

MenuItem.objects.rebuild() 
6

最近MPTTのバージョンは、次のコマンドを必要としているようです。前のダッシュは、ツリーマネージャがプライベートであることを示し、そしておそらく直接アクセスすべきではありませんが、少なくともそれは、今日の私の仕事:partial_rebuildはまだ今日0.5のようである公式リリースの一部ではないことを

MyObj._tree_manager.rebuild() 
+0

MyObjは実際のモデルクラスであり、オブジェクトではないことに注意してください。 Django-MPTT 0.8.7でテスト済み - 壊れた関係を再構築しましたが、根本的に根本的な問題はまだありませんでした。 – JxAxMxIxN

関連する問題