Я использую Django / Python, но здесь определенно допустим псевдокод.
Работая с некоторыми уже существующими моделями, у меня есть Employee
s, у каждой из которых есть Supervisor
, что по сути является отношением типа внешнего ключа к другой Employee
.
В тех случаях, когда иерархия «Сотрудник / Руководитель» выглядит примерно так:
У любого сотрудника есть ОДИН руководитель.У этого Супервайзера может быть один или несколько Сотрудников «ниже», и у него также есть собственный Супервайзер.Получение моего «вышестоящего» должно вернуть моего руководителя, его руководителя, ее руководителя и т. Д. До достижения сотрудника, у которого нет руководителя.
Без лишних усилий и установки новых приложений для управления этими отношениями, так как это существующая кодовая база и проект, я задаюсь вопросом "питонический" или правильный способ реализации следующих функций:
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, но если я смогу оставить модели в такте и просто получить больше функциональности, это того стоит.