ManyToManyField的Django-OneToOneField子集

ManyToManyField的Django-OneToOneField子集,django,model,many-to-many,subset,one-to-one,Django,Model,Many To Many,Subset,One To One,基本上,我写了一个网站模型运动队,我有两个模型,球员和球队。一支球队与球员有多人在场的关系,也有一个代表队长的一人在场的关系,该关系应仅限于球队中的球员(即,你不能有一个队长不是球员之一) 基本上,我想知道的是什么是最好的方式来限制OneToOneField,队长,只选择其中一名球员 我试过了 limit_choices_to={'team_set__players__name__icontains':""} 作为kwarg,我认为唯一可行的方法是在captain字段上使用自定义验证器进行数

基本上,我写了一个网站模型运动队,我有两个模型,球员和球队。一支球队与球员有多人在场的关系,也有一个代表队长的一人在场的关系,该关系应仅限于球队中的球员(即,你不能有一个队长不是球员之一)

基本上,我想知道的是什么是最好的方式来限制OneToOneField,队长,只选择其中一名球员

我试过了

limit_choices_to={'team_set__players__name__icontains':""} 
作为kwarg,我认为唯一可行的方法是在captain字段上使用自定义验证器进行数据库查找,但肯定有更好的方法吗


谢谢您的帮助。

您需要覆盖
团队
模型上的
clean
方法。看一看这张照片


当在模型上运行
有效时,将自动调用您的
clean
方法。

您是否在管理中创建团队和玩家?谢谢,我在表单中使用了很多此方法,但从未想过在模型上使用此方法。
limit_choices_to={'team_set__players__name__icontains':""} 
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")