Я пытаюсь создать модели, представляющие швейцарский турнир , с несколькими раундами. Каждый раунд каждый будет в паре с другим игроком, за исключением случая, когда выходит нечетный игрок, когда один игрок получит прощание.
Мне нужно отслеживать результат каждой пары; то есть, какой игрок выиграл. Кроме того, я хотел бы позже иметь возможность эффективно искать всех игроков, которые когда-либо играли против данного игрока.
Очевидные вещи:
class Tournament(models.Model):
name = models.CharField(max_length=80)
class Player(models.Model):
name = models.CharField(max_length=80)
Сначала я планировал иметь класс "TournamentPairing", который выглядел примерно так:
class TournamentPairing(models.Model):
tournament = models.ForeignKey(Tournament)
round = models.IntegerKey()
player1 = models.ForeignKey(Player)
player2 = models.ForeignKey(Player, null = True) # In case of a bye, this is None.
outcome = models.CharField(max_length=1) # player1 wins, loses, bye, or tie
Но это кажется хакерским, особенно то, что player2 иногда None. Кроме того, я не думаю, что это облегчает поиск (так как искомый игрок может находиться в слоте player1 или player2).
Есть ли лучший способ? Я подозреваю, что мой django noob-ness препятствует мне найти правильное решение здесь.