Могу ли я получить помощь со схемой Django/SQLite3?

Я пытаюсь создать приложение Django, которое будет показывать команды и игры для моей футбольной лиги. Я сделал несколько попыток создания моделей, но не могу понять, как они будут связаны друг с другом.

Вот чего я пытаюсь достичь:

  1. Каждый год шесть команд участвуют в турнире "Toilet Bowl", который определяет худшую команду лиги.
  2. Есть три раунда.
  3. Две худшие команды не играют в первом раунде. Таким образом, команда 1 играет с командой 4, а команда 2 - с командой 3.
  4. Во втором раунде команды 1 и 2 играют с проигравшими в первом раунде.
  5. В раунде 3 оставшиеся две команды играют за титул.

Вот модели, которые у меня есть на данный момент. Я знаю, что они не оптимальны.

class Owner(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField(max_length=100)
    phone = models.CharField(max_length=12, null=True)
    def __str__(self):
        return "%s" % (self.name)


class Team(models.Model):
    owner = models.ForeignKey(Owner, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    def __str__(self):
        return self.name


class Game(models.Model):
    year = models.SmallIntegerField(
        validators=[MinValueValidator(2010), 
        MaxValueValidator(2999), 
        RegexValidator("^(20)([1-5][0-9])$")
        ])
    round = models.SmallIntegerField(
        validators=[MinValueValidator(1), MaxValueValidator(3)])
    teams = models.ManyToManyField(Team)
    #teams = models.ForeignKey(Team, on_delete=models.CASCADE)
    #team1_score = models.IntegerField(default=0)
    #team2_id = models.ForeignKey(Team, on_delete=models.CASCADE)
    #team2_score = models.IntegerField(default=0)
    def __repr__(self):
        return f"{self.round}, {self.year}, {self.teams}"

Я хотел бы иметь поля для очков команд в модели Game, но с типом поля ManyToManyField я не уверен, как связать команду с очками. Я также не очень хочу иметь круглый номер и год в модели Game, но я не уверен, как мне разделить их на собственные модели и связать их с Game. Я также не уверен, что это стандартная практика - иметь модель только с одним полем (скажем, Year).

Заранее спасибо. Это мое первое приложение на Django, и я смог разобраться в большинстве из них на основе поиска, но эта схема поставила меня в тупик.

Я буду рад предоставить любую другую необходимую информацию.

В этом случае, вместо использования поля многие ко многим, вы должны создать третью таблицу, которая будет иметь в качестве полей внешний ключ игры, внешний ключ команды и счет, не забудьте определить в Meta поле unique_together, чтобы ключи иностранцев были уникальными вместе

class GameTeam(models.Model):
    game = models.ForeignKey(Game, on_delete=models.CASCADE)
    team = models.ForeignKey(Team, on_delete=models.CASCADE)
    score = models.PositiveSmallIntegerField()

    class Meta:
        unique_together = [['game', 'team']]
Вернуться на верх