2

次の 2 つのモデルがあるとします。

class Match(models.Model):
    ...

class Player(models.Model):
    match=models.ForeignKey(Match)
    points=models.IntegerField()

試合ごとの平均ポイントを計算したい。つまり、すべてのプレイヤーのポイントを合計し、それを試合数で割る必要がある。Djangoでこれを効率的に行う方法を理解するのに苦労しています。

グーグルを試したり、StackOverflow を検索したりしましたが、そもそもどの用語を探すべきかを理解するのに苦労しています。

match = Match.objects.annotate(total_points=Sum('player__points'))

match[0].total_points が 1 つの試合の合計ポイントを返すようになりました。すべての試合の total_points を合計し、それを合計試合数で割る必要があります。

助けてくれてありがとう!

4

2 に答える 2

1

を使用aggregateしてポイントの総数を合計し、count()一致の数を見つけてから、Pythonで除算して、一致ごとの平均ポイント数を取得します。

from django.db.models import Sum
total_points = Player.objects.aggregate(Sum('points'))['points__sum']
num_matches = Match.objects.count()
average_points_per_match = total_points / num_matches
于 2012-11-26T00:58:12.937 に答える