Я бы сделал подчиненное поле и удалил бы супервизора.
subordinates = models.ManyToManyField('self', related_name='supervisors', through=Position)
Таким образом, у руководителей будет поле автоматического обратного просмотра, и будет запись о позиции, которая соединяет руководителя с подчиненным
edit: На самом деле, я бы также посоветовал тщательно подумать о перепроектировании ваших моделей. Может быть, вам не нужно столько, сколько вы предлагаете.
Похоже, у вас есть "отдел", "компания" (если вам нужно отслеживать несколько компаний), "должность", "местоположение" и "человек" ... Решите, какие крупные объекты сохранить, а затем подумайте, где именно Каждое поле принадлежит и как связать «большие» объекты, которые будут преобразованы в таблицы.
Вероятно, будет лучше установить отношения подчиненного-супервизора между объектами Позиции, потому что люди приходят и уходят, но позиция более постоянна. Так что я бы имел:
class Position:
title = models.CharField() #product manager, engineer, etc.
employee = models.ForeignKey(Person, related_name='positions')
subordinates = models.ManyToManyField('self', related_name='supervisors')
из, если вам не нужно несколько супервизоров на позицию, используйте
supervisor = models.ForeignKey('self', related_name='subordinates')
Несмотря на то, что поле subordiantes теперь отсутствует, оно будет доступно, как и ранее, через соответствующее имя.
Куда относится местоположение?
Если вы решите, что и у сотрудника, и у отдела должно быть местоположение, то вы можете подумать о родовых отношениях, хотя с ними и не так легко работать, как с «обычными», но вы также можете избежать добавления «типа» location ('private / business'), а затем используйте Location.company или Location.residence_owner и избегайте использования общих отношений.