我有一个模型,看起来像:
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')
Run Code Online (Sandbox Code Playgroud)
我当前的团队层次结构的设计方式是让管理员(谁是最重要的层次结构).现在,让我们说3个人(A,B,C)向管理员报告,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
Run Code Online (Sandbox Code Playgroud)
我通过以下方式获得成员的团队成员:
member = StaffMember.objects.get(pk=72)
team = member.get_team()
Run Code Online (Sandbox Code Playgroud)
但显然,这导致了很多db调用,我的API最终会超时.什么可以更有效的方式来获取团队的所有成员?