2014-03-05 54 views
1

我必須在django中創建組織結構(樹狀)。目前,我正在使用一對一映射表,auth_user具有parent_id,但是當組織級別更高時,我必須在同一個表上激發多個查詢才能獲得頂級節點的子級。如何在django中創建分層組織(樹狀)?

此外,我需要在幾個視圖的基礎上允許權限。例如。用戶可以有權查看特定表格中的自己的條目以及他的團隊添加的條目。 對於權限,我正在獲取所有用戶的列表,並檢查用戶是否與添加了相同條目和檢查權限的用戶相同(在視圖之前的修飾器中)。我認爲如果我可以重寫has_perm方法來做同樣的事情會更好。

有沒有更好的方法來做到這一點或做一個類似的插件?

+3

有一些Django的EXTS像Django的MPTT的http:// imom0 .github.io/2014/more-efficient-way-for-handling-hierarchical-structure-in-relational-database.html – iMom0

+0

django-mptt不能正常工作,因爲我在另一個表中有parent_id,它有一對一與auth_user映射但不在auth_user中映射。 – Anuj

回答

0

通過使用幾種已知方法之一(例如,請參閱this question以瞭解詳細信息),您可以解決組織結構父/祖查詢問題。對於Django特定的問題,有一個稱爲treebeard的合理活動項目,它提供了鄰接列表,物化路徑和嵌套集合。

對於權限問題,你必須更詳細地指定的問題,但如果你使用treebeard一種可能性是:

def can_view(entry, user): 
    return entry.user.get_root() == user.get_root()