我有一个模型,它看起来像这样:
class StaffMember(models.Model):
id = models.OneToOneField(to=User, unique=True, primary_key=True, related_name='staff_member')
supervisor = models.ForeignKey(to='self', null=True, blank=True, related_name='team_members')
我的团队当前的层级结构是这样设计的:有一个管理员(位于最高层次)。现在,假设3个人(A、B、C)向管理员汇报工作,每个人都有自己的团队向他们汇报工作以此类推。
我想要查找任何员工的所有团队成员(归纳到层级结构的底部),我的当前方法是:
def get_team(self):
team = [self]
for c in self.team_members.all():
team += list(c.get_team())
if len(team) > 2000:
break
return team
我可以通过以下方式获取成员的团队成员:
member = StaffMember.objects.get(pk=72)
team = member.get_team()
显然,这会导致大量的数据库调用,最终导致我的API超时。有什么更有效的方法可以获取一个团队的所有成员?