I have a model, which looks like:
class StaffMember(models.Model):
id = models.OneToOneField(to=User, unique=True, primary_key=True, related_name=\'staf
If you're using a database that supports recursive common table expressions (e.g. PostgreSQL), this is precisely the use-case.
team = StaffMember.objects.raw('''
WITH RECURSIVE team(id, supervisor) AS (
SELECT id, supervisor
FROM staff_member
WHERE id = 42
UNION ALL
SELECT sm.id, sm.supervisor
FROM staff_member AS sm, team AS t
WHERE sm.id = t.supervisor
)
SELECT * FROM team
''')
References:
Raw SQL queries in Django
Recursive Common Table Expressions in PostgreSQL