我需要为公司的职位建立组织结构图(CTO回答CEO,开发人员回答CTO等),我需要创建一个友好的用户界面来反映这一点。 UI部分现在不是我关注的问题,因为如果我构建后端正确,前端将很容易。
因此,如果不使用任何花哨的模式(如图表),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。在我的问题的早期,我想避免使用图表等,仅仅是因为我对它们一无所知,并且时间紧迫。在这种情况下,学习和使用图表会有很多帮助吗?
答案 0 :(得分:3)
您可以将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()