Создайте команду Django / игрока, где порядок имеет значение

Я создаю базу данных всех гонок, выигранных спортсменами нашего клуба. Цель - иметь обзор всех выигранных гонок, а также подсчет побед для каждого спортсмена.

Человек в базе данных может быть либо спортсменом, либо тренером, либо и тем, и другим, но не во время одной и той же гонки. В гонке могут участвовать 1, 2, 4 или 8 человек, и порядок спортсменов имеет значение, поэтому я думаю, что поле ManyToMany не работает (показывает только до 4). Теперь я решил эту проблему с помощью 8 полей OneToOneField. Всегда должен быть 1 спортсмен, поэтому первое поле не может быть пустым. Экипажи обычно меняются от гонки к гонке и могут отличаться по количеству спортсменов, поэтому я не стал создавать класс Crew.

class Person(models.Model):
    letters = models.CharField(max_length=10, blank = False)
    name    = models.CharField(max_length = 100, blank = True)
    tussen  = models.CharField(max_length = 50,     blank = True)
    lastname = models.CharField(max_length = 100,   blank = False)
    starting_year = models.IntegerField(blank = True)

class RaceWin(models.Model):
    name = models.CharField(max_length =100, blank = False)
    year        = models.IntegerField(blank = False)
    month       = models.IntegerField(blank = True, null = True)        
    athlete_1 = models.OneToOneField(Person, on_delete = models.CASCADE, related_name='athlete1', blank = False)
    athlete_2 = models.OneToOneField(Person, on_delete = models.SET_NULL, related_name='athlete2', blank = True, null = True)
    athlete_3 = models.OneToOneField(Person, on_delete = models.SET_NULL, related_name='athlete3', blank = True, null = True)   
    athlete_4 = models.OneToOneField(Person, on_delete = models.SET_NULL, related_name='athlete4', blank = True, null = True)   
    coach   = models.OneToOneField(Person, on_delete = models.SET_NULL, related_name='coach', blank = True, null = True)

Теперь мне нужно выполнить итерации над 8 ателами для проверки количества побед, но я не совсем уверен, как я могу это сделать. Есть ли лучший способ различать 8 возможных спортсменов, сохраняя их порядок?

Во-вторых, в этом примере я предположил, что все спортсмены из моего клуба, но возможны и смешанные команды. Для этих спортсменов я хочу хранить клуб, из которого они состоят, но не их starting_year. Поэтому я придумал следующее решение для хранения различий.

class Person(models.Model):
    letters = models.CharField(max_length=10, blank = True)
    name    = models.CharField(max_length = 100, blank = True)
    tussen  = models.CharField(max_length = 50,     blank = True)
    surname = models.CharField(max_length = 100,    blank = False)

class Member(Person):
    arrival_year = models.IntegerField(blank = True)

class NonMember(Person):
    club = models.CharField(max_length = 100)
Вернуться на верх