【发布时间】:2019-06-25 23:59:36
【问题描述】:
我有两个模型:玩家和锦标赛。
玩家也有他们玩的游戏类型(dota、lol、魔术等)。他们可以同时参加多场比赛(每场比赛只能参加一次)。为了管理铭文,我使用了另一个名为 TournamentMatch 的模型,它为每个铭文创建一个新对象,其中包含锦标赛和玩家的 ID。
class Player(models.Model):
name = models.CharField(_('name'), max_length=150, null=True, blank=True)
email = models.EmailField(_('email address'), unique=True)
is_dota_player = models.BooleanField(default=False)
is_lol_player = models.BooleanField(default=False)
is_magic_player = models.BooleanField(default=False)
class Tournament(models.Model):
name = models.CharField(max_length=200)
date_start = models.DateField()
date_end = models.DateField()
class TournamentMatch(models.Model):
tournament = models.ForeignKey(Tournament)
player = models.ForeignKey(Player)
date_added = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
我想统计拥有两个以上锦标赛铭文的玩家数量,例如,dota 玩家。
我可以很容易地为每个玩家使用 for 循环来实现这一点,但出于性能原因,我想使用 Django 查询来实现这一点。
例如,如果我想统计拥有一个或多个铭文的dota玩家,我会这样做:
TournamentMatch.objects.filter(
player__is_dota_player=True
).distinct(
'player'
).count()
我确信这是可能的,但我不知道如何计算锦标赛中不同玩家的每一次出现,并且只过滤那些拥有多个(而不仅仅是一个)的玩家。
我将不胜感激任何帮助或指点!
【问题讨论】:
-
请显示您的模型定义。
标签: django