Django-如何将外键选择限制为另一个模型中的多米马尼字段



我有3个模型:ChampionshipTeamMatchChampionshipTeamManyToManyField有关,因为每个球队都可以参加多个冠军,每个冠军都有许多球队。每场比赛都应与冠军相关,但也应与冠军的2支球队有关。

class Championship(models.Model):
    name = models.CharField(max_length=100)
    teams = models.ManyToManyField(Team)
class Team(models.Model):
    name = models.CharField(max_length=100)
class Match(models.Model):
    championship = models.ForeignKey(Championship)
    team1 = models.ForeignKey(Team)
    team2 = models.ForeignKey(Team)
    score1 = models.PositiveIntegerField()
    score2 = models.PositiveIntegerField()

我想确保" Team1"one_answers" Team2"在"冠军"中。而且" Team1"one_answers" Team2"也不同。

我该怎么做?

也许我可以使用django-smart-selects之类的东西,但我宁愿避免使用第三方应用程序。

您可以在save方法中进行模型验证:

from django.core.exceptions import ValidationError

class Match(models.Model):
    championship = models.ForeignKey(Championship)
    team1 = models.ForeignKey(Team)
    team2 = models.ForeignKey(Team)
    score1 = models.PositiveIntegerField()
    score2 = models.PositiveIntegerField()
    def save(self, *args, **kwargs):
        if self.team1 == self.team2:
            raise ValidationError('The two teams in a match must be distinct')
        all_teams = self.championship.teams.all()
        if self.team1 not in all_teams or self.team2 not in all_teams:
            raise ValidationError('Both teams must be in the championship')
        return super(Match, self).save(*args, **kwargs)

相关内容

最新更新