models.py
class Contest(models.Model):
sport = models.CharField(max_length=200)
class Player(models.Model):
name = models.CharField(max_length=200)
contest = models.ManyToManyField(Contest)
class Entry(models.Model):
num_entries = models.IntegerField()
player = models.ForeignKey('Player',on_delete=models.CASCADE)
スポーツに基づいてプレーヤーを見つけて、Entriesテーブルの利益エントリで集計関数を実行するにはどうすればよいですか?あなたはプレイヤーが複数のエントリを持つようにしたい場合は、お使いのモデルは次のようになります外部キーテーブルで集合関数を実行する
from .models import *
from django.db.models import Avg
player = Player.objects.filter(name='Player A').filter(contest__sport='nba').aggregate(Avg(entries__num_entries))
あなたの 'Entries'モデルはあまり意味がありません。プレーヤーはすでに逆の外部キー関係を介して複数のエントリを持っているので、 'num_entries'のようなフィールドは必要ありません。追加の情報は保存されません。このモデルは何を表していますか?モデルは通常、テーブル内に1行を定義するため、複数形ではありません。テーブルはエントリですが、モデルは1つのエントリを定義します。名前は「Entry」にする必要があります。 – trixn
私のモデルにはもっと多くのフィールドが含まれていますが、簡単にするために、私は最小値を掲示しました。あなたの権利は、エントリーではなくエントリーでなければなりません。 –
しかし、 'Entry'モデルに' num_entries'というフィールドがあるのはなぜですか?それは意味をなさない。エントリーの内容を説明してください。 – trixn