2012-03-29 15 views
2

私は、次のようtree_idフィールドを上書きしたい:MPTT - どのように「tree_id」を上書きするには

考える:

class Thing(MPTTModel): 
    thing_id = models.AutoField(primary_key=True) 
    ... 

    class MPTTMeta: 
     tree_id = ? 

私はthing_idでtree_idを開始したい「もの」最初の親を作成中オブジェクトが最初に保存されるときに割り当てられます。

次に、後で作成された「Thing」オブジェクトに対して、前に作成された最初の親のthing_idを渡したいと思います。

つまり、treeのすべてのノードはtree_idとして最初の祖先のobjectId(thing_id)を持ちます。

可能ですか?

"Thing"オブジェクトを作成する際にどのように値を渡す必要がありますか?

編集:

だから、私のニーズのためのソリューションは、単にあるようだ:Thing.objects.get(PK = thing_id).get_descendants()

答えて

1

私はあなたがしようとしているのか分かりません行う。 tree_iddjango-mptt内部フィールドですが、mpttアルゴリズムの外では意味がありません。

あなたのツリーをthing_idでソートしようとしているかもしれないので、最も古い祖先のものがツリーの最初に表示されますか?なぜあなたはそれをしたいのかわかりませんが、もしそうなら、あなたはおそらくorder_insertion_byを使うべきです。

class MPTTMeta: 
    order_insertion_by = ['thing_id'] 

ドキュメント:http://django-mptt.github.com/django-mptt/models.html#model-options

+0

私が欲しいのは、私の「物事」オブジェクトのサブセットを選択することです。ドキュメントでGenre.objects.all()の使用法を見て、逆ツリーの最初の祖先に関連するすべての「もの」がtree_idとして最初の祖先オブジェクトIDを持つ場合、それらを簡単に選択できるように考えました次のように:list = Thing.objects.filter(thing_type = 2、tree_id = thing_id) – bentzy

+0

ノードの子孫を取得しようとしていますか?あなたは単にThing.objects.get(pk = 1).get_descendants()を使うことができます。 – craigds

関連する問題