2012-03-29 28 views
2

我想覆蓋tree_id領域如下:MPTT - 如何覆蓋「tree_id」

考慮:

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

    class MPTTMeta: 
     tree_id = ? 

在創建「物」中第一個父我想發起tree_id與thing_id首次保存對象時分配。

接下來,對於稍後創建的「Thing」對象,我想傳遞之前創建的第一個父對象的thing_id。

即樹中的所有節點將具有作爲tree_id的第一祖先的objectId(thing_id)。

可能嗎?

如何在創建「物品」對象時傳遞值?

編輯:

因此,似乎對我的需求的解決方案僅僅是:Thing.objects.get(PK = thing_id).get_descendants()

回答

1

我不知道你想什麼做。 tree_id是一個django-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作爲第一個祖先的目標,那麼選擇它們會很容易如下所示:list = Thing.objects.filter(thing_type = 2,tree_id = thing_id) – bentzy 2012-03-29 19:06:01

+0

所以..你試圖得到節點的後代?你可以使用Thing.objects.get(pk = 1).get_descendants() – craigds 2012-03-29 19:14:21