2

次のように tree_id フィールドをオーバーライドします。

与えられた:

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

    class MPTTMeta:
        tree_id = ?

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

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

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

出来ますか?

「モノ」オブジェクトの作成中に値を渡すにはどうすればよいですか?

編集:

したがって、私のニーズに対する解決策は単に Thing.objects.get(pk=thing_id).get_descendants() のようです

4

1 に答える 1

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

于 2012-03-29T18:37:50.457 に答える