Ich habe ein Modell, das wie folgt aussieht:Wie rekursiv in Django rekursiv abfragen?
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')
Meine aktuelle Hierarchie der Mannschaft ist so ausgelegt, dass es ist ein Admin lassen sagen (die an der obersten Stelle der Hierarchie ist). Nehmen wir an, 3 Personen (A, B, C) melden sich beim Administrator und jeder von A, B und C hat sein eigenes Team, das ihnen Bericht erstattet usw.
Ich möchte alle Teammitglieder finden (bis auf die unterste Ebene der Hierarchie), für jeden Mitarbeiter. Meine aktuelle Methode, um alle Teammitglieder einer Person zu bekommen, ist wie:
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
ich die Teammitglieder eines Mitglieds erhalten von:
member = StaffMember.objects.get(pk=72)
team = member.get_team()
Aber offensichtlich, führt dies zu einer Menge von db Anrufe und meine API schließlich ausläuft. Was könnte effizienter sein, um alle Mitglieder eines Teams zu holen?
uns zeigen Sie Ihre get_team() -Methode – sebb
Es hat sich in der Frage hinzugefügt – Shubhanshu
Haben Sie die _SET Methode auf Fremdschlüssel versucht, mit? Ich habe es noch nie mit einem rekursiven Modell gemacht, also weiß nicht, wie die Ausgabe aussehen könnte. Sie könnten auch versuchen .select_related() und sehen, was Sie am Ende haben. Ich denke, das wird Ihnen die notwendige Leistung geben, aber wie effizient ist ich mir nicht sicher. –