2015-12-28 69 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

接受你的答案,因为我开始实施它,到目前为止,我对它的工作原理感到满意。 –