0

基本上我正在写一个网站来模拟运动队,我有两个模型,球员和球队。一个 Team 与 player 有 ManyToManyField 关系,还有一个代表队长的 OneToOneField 应该仅限于团队中的玩家(即你不能有一个不是玩家之一的队长)。

class Player(models.Model):
    name = models.CharField()
    .....

class Team(models.Model):
    players = models.ManyToManyField(Player)
    captain = models.OneToOneField(Player)
    ....

基本上我想知道什么是限制 OneToOneField 的最佳方法,队长,只选择球队中的一名球员。

我试过了

limit_choices_to={'team_set__players__name__icontains':""} 

作为一个 kwarg,我认为唯一可行的方法是在船长字段上使用自定义验证器来进行数据库查找,但肯定有更好的方法吗?

谢谢你的帮助。

4

1 回答 1

2

您需要覆盖模型clean上的方法Team。看看文档

from django.core.exceptions import ValidationError

class Team(models.Model):
    def clean(self):
        if self.captain not in self.players.all():
             raise ValidationError("Captain must be already be a player")

在模型上运行clean时会自动调用您的will 方法。is_valid

于 2013-03-02T06:45:04.057 回答