Django:限制OnetoMany关系中的关系数量

时间:2011-01-07 00:37:47

标签: django django-models

您好我希望将ForeignKey关系限制为具体数字 可以说篮球队只能有12个人。

class Team(models.Model):
 teamName = models.CharField(max_length = 20)
 teamColors = models.CharField(max_length = 20)
 ... <and so forth>

class Player(models.Models):
 team = models.ForeignKey(Team, **)
 name = models.CharField(max_length = 20)
 heightInches = models.IntegerField()
 ... <and so forth>

**这里有一个选项可以限制每队最多12名球员吗?

有任何额外的创建python错误吗?

2 个答案:

答案 0 :(得分:4)

没有直接的方法来限制ForeignKey定义中团队中的玩家数量。但是,这可以通过与您的模型一起使用来完成。

一种选择是在Team上创建一个方法,例如:

def add_player(self, player):
    if self.player_set.count() >= 12:
         raise Exception("Too many players on this team")

    self.player_set.add(player)

然后你想要总是通过这种方法添加玩家。

答案 1 :(得分:0)

我认为另一种选择是像这样覆盖Player模型上的save方法:

class Player(models.Models):
    team = models.ForeignKey(Team, **)
    name = models.CharField(max_length = 20)
    heightInches = models.IntegerField()
    ... <and so forth>

    def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
        if self.player_set.count() < 12:
            super(Player, self).save()
        else:
            raise Exception(f'{self.team.teamName} has already 12 players. No more are allowed.')