我正在使用Django/Python,但伪代码在这里绝对是可接受的。
在处理一些已经存在的模型时,我有一些员工(Employee)
,每个员工都有一个主管(Supervisor)
,它实际上是另一个员工(Employee)
的ForeignKey类型关系。
员工/主管层次结构如下:
任何给定的员工都有一个主管。该主管可能有一个或多个“下属”,并且有自己的主管。检索我的“上级”应该返回我的主管,他的主管,她的主管等,直到达到没有主管的员工。
不要安装新应用程序来管理这些关系,因为这是现有的代码库和项目,我想知道实现以下函数的“pythonic”或正确方法:
def get_upline(employee):
# Get a flat list of Employee objects that are
# 'supervisors' to eachother, starting with
# the given Employee.
pass
def get_downline(employee):
# Starting with the given Employee, find and
# return a flat list of all other Employees
# that are "below".
pass
我觉得使用Django ORM可能有一种比较简单的方法来实现这个目标,如果没有,我会接受任何建议。
我还没有仔细研究Django-MPTT,但如果我可以保留模型不变,只需获得更多功能,那将是值得的。
parent
、level
、left
和right
。 - Daniel Roseman