2015-12-28 125 views
0

我需要建立一個公司的職位圖表(CTO回答首席執行官,開發人員回答CTO等),我需要創建一個友好的用戶界面來反映這一點。 UI部分現在不是我的問題,因爲如果我正確構建後端,前端將很容易。Django模型結構的組織結構圖

因此,如果沒有使用任何花哨的圖案(如圖),Position模型的最佳結構是什麼(當我獲取組織結構圖時,我的生活更輕鬆)?

到目前爲止,我已經想到了類似於以下內容的內容,但如果我需要在組織結構圖中深入10個層次,則擁有parent外鍵本身對我本身無幫助。

class Position(models.Model): 
    name = models.CharField(max_length=100) 
    company = models.ForeignKey(Company) # irrelevant 
    level = models.PositiveSmallIntegerField() # depth level (not sure if I need this since I have parent_position) 
    parent_position = models.ForeignKey("self") 

PS。在我的問題早些時候,我想避免使用圖表等,只是因爲我對它們毫無知識,而且時間緊。在這種情況下學習和使用圖表會有很多幫助嗎?

回答

2

您可以使用該項目的django-mptt包。它會將您的HR部分組成樹結構,並在一個批次中查詢子樹而不遍歷樹。像這樣的東西應該讓你開始(沒有什麼明顯的產品):

from mptt.models import MPTTModel, TreeForeignKey, TreeManager 

class Organization(MPTTModel): 
    name = models.CharField(max_length=255, unique=True) 
    members = models.ManyToManyField(User) 
    parent = TreeForeignKey('self', related_name='children') 
    objects = TreeManager() 
+0

看起來正確。一定會在未來幾天嘗試。謝謝。 –

+0

我在生產中使用它來進行人力資源管理,而且我還有大量的其他utils通過使用Organization自己查看'members'字段來獲得經理/團隊成員/子團隊。 –

+0

接受你的答案,因爲我開始實施它,到目前爲止,我對它的工作原理感到滿意。 –