Могу ли я получить помощь со схемой Django/SQLite3?
Я пытаюсь создать приложение Django, которое будет показывать команды и игры для моей футбольной лиги. Я сделал несколько попыток создания моделей, но не могу понять, как они будут связаны друг с другом.
Вот чего я пытаюсь достичь:
- Каждый год шесть команд участвуют в турнире "Toilet Bowl", который определяет худшую команду лиги.
- Есть три раунда.
- Две худшие команды не играют в первом раунде. Таким образом, команда 1 играет с командой 4, а команда 2 - с командой 3.
- Во втором раунде команды 1 и 2 играют с проигравшими в первом раунде.
- В раунде 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']]