我是Django的新手,但我正在制作一个游戏,其中一个元素是玩家互相投票.
以下是我设置的模型(仅限相关字段)
#models.py
class Game(models.Model):
gamecode = ShortUUIDField(length=4, max_length=4, unique=True)
phasenumber = models.IntegerField(default=1)
isActive = models.BooleanField(default=True)
class Player(models.Model):
game = models.ForeignKey(Game, on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
isPlaying = models.BooleanField(default=True)
class PlayerVote(models.Model):
byplayer = models.ForeignKey(Player, on_delete=models.CASCADE)
forplayer = models.ForeignKey(Player, on_delete=models.CASCADE, related_name="voteforplayer")
gamephasenumber = models.IntegerField()
timestamp = models.DateTimeField(auto_now_add=True)
当用户加入游戏时,他们在"玩家"模型中获得一个条目,当他们为另一个玩家投票时,一个条目被添加到"玩家投票"模型中,显示哪个玩家投票(by玩家)和他们投票给谁(for玩家).
我想做的是创建一个包含每个玩家和他们得到多少票的查询集.
我试过使用注释,它似乎可以给我一个投票数的计数,但它默认为加入byplayerfield,所以我最终得到的是每个玩家投的票数,而不是每个玩家收到的票数.
在SQL中,我只会在Player.pk=PlayerVote.forplayer.pk上连接,在Django中可以做类似的事情吗?
或者,我可以创建一个额外的模型,总结每个玩家收到的选票,每投一票就增加1,但这似乎没有必要,