Soll entry_set mit select_related gespeichert werden? Meine DB erhält immer noch Anrufe, auch wenn ich select_related verwende. Die entsprechenden Abschnittedjango: select_related with entry_set
class Alias(models.Model):
achievements = models.ManyToManyField('Achievement', through='Achiever')
def points(self) :
points = 0
for a in self.achiever_set.all() :
points += a.achievement.points * a.count
return points
class Achievement(models.Model):
name = models.CharField(max_length=100)
points = models.IntegerField(default=1)
class Achiever(models.Model):
achievement = models.ForeignKey(Achievement)
alias = models.ForeignKey(Alias)
count = models.IntegerField(default=1)
aliases = Alias.objects.all().select_related()
for alias in aliases :
print "points : %s" % alias.points()
for a in alias.achiever_set.all()[:5] :
print "%s x %d" % (a.achievement.name, a.count)
Und ich sehe eine große Join-Abfrage am Anfang und dann individuelle Anrufe für jeden Erfolg. Sowohl für die Punkte als auch für die Namenssuche.
Ist das ein Fehler, oder mache ich etwas falsch?
Bummer. Wie würden Sie mir empfehlen, diese Abfrage durchzuführen? SQL von Hand? –
Für jeden Leser, ein 'select_related()' Äquivalent für M2M und umgekehrt FK ist 'prefetch_related()' und wurde in 1.4 hinzugefügt. – Bryan
googletorp und @Bryan, danke SO VIEL. – Jamey