2010-04-15 63 views
0

可以說我有這個類(簡體):複雜的Django過濾器的問題

class Tag (...): 
    children = models.ManyToManyField(null=True, symmetrical=False) 

現在我已經實現的功能get_parents,get_all_ancestors。有沒有一個很好的pythonic方式來只是頂級標籤?如果我設計了不同的標籤(指向父母),我只需要製作get_all_parents().filter(children=None)

我的第一個想法是創建一個新的函數,將遞歸通過所有的父母,並保存那些沒有。

但是有沒有可能使用過濾器或查詢對象來執行相同的操作(使用更少的代碼行)?

感謝您的幫助。

[編輯]

當完成時,它應該是一個分層的標籤系統。每個標籤可以有孩子,父母,但只有孩子得救。我想獲得所有頂級標籤,這通過許多兒童/兒童孩子指向我的標籤。

+0

你能舉例說明你的數據輸出應該是什麼樣子嗎? – viksit 2010-04-15 21:03:38

+0

我的數據輸出應該是一個標籤列表,或者甚至更好的一個查詢集。它們之間很容易轉換,所以兩者都適合我的情況。 – 2010-04-15 21:05:57

回答

0

既然你已經有了symmetrical=False,我想這應該讓所有的標籤,沒有父母:

Tag.objects.filter(tag_set=None) 

我必須說的是一個多對多的關係是不理想的等級制度。通常情況下,一個元素只能有一個父元素但有多個子元素 - 即它是從子元素到父元素的ForeignKey。你有它的方式,每個元素可以有多個父母多個孩子,所以我不明白等級關係是可能的。

一如既往,我建議使用django-mptt來管理分層數據。

+0

啊thx,我忘了tag_set。 django-mptt不是我的選擇,因爲我想要多個父母。所以頂級父母可以像類別。 – 2010-04-15 21:57:58