ManyToManyField的Django-OneToOneField子集
基本上,我写了一个网站模型运动队,我有两个模型,球员和球队。一支球队与球员有多人在场的关系,也有一个代表队长的一人在场的关系,该关系应仅限于球队中的球员(即,你不能有一个队长不是球员之一) 基本上,我想知道的是什么是最好的方式来限制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字段上使用自定义验证器进行数
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")