私は次の構造を持っています:
class Player(models.Model):
name = models.CharField(max_length=50)
dob = models.DateField(max_length=80)
class Game(models.Model):
name = models.CharField(max_length=50)
class Attempts(models.Model):
player = models.ForeignKey("Player")
game = models.ForeignKey("Game")
won = models.BooleanField()
クラス Attempts は、各プレーヤーの試行と、ゲームに勝ったか負けたかを記録します。ここで、特定のゲームを agr グループで試行した人の数を取得したいと考えています。たとえば、0 ~ 18 歳の人がゲームを 5 回試行したとします。 on.djangoユーザーの次のこの投稿を参考にして、次のコードを作成しました。
ranges = [(0,18),(18,25),(25,50)]
now = datetime.now()
groups = {}
for (a,b) in ranges:
# print str(a) + " " +str(b)
newer_date = (now - relativedelta(years=a)).date()
older_date = (now - relativedelta(years=b)).date()
print str(newer_date)
print str(older_date)
groups[str(a)+","+str(b)] = Attempts.objects.filter(game__pk = "101",player__dob__range=(older_date,newer_date)).count()
これにより、次のように結果も正しく得られます。
{"0,18": 2, "25,50": 1, "18,25": 1}
このコードによって作成されたクエリは、範囲内のカテゴリの数と同じです.1つのORMクエリでこのデータを取得する方法が必要です.それは可能ですか?