Django - 如果存在一个模型字段,则另一个字段必须为空/不可访问

时间:2017-11-08 02:44:45

标签: django

我有一个名为Team的模型。团队有一个用户作为team_leader,可以拥有多个team_member。

在“用户”下,我添加了以下字段:

class User(AbstractUser):
    team_leader = models.OneToOneField(Team, null=True, blank=True)
    team_member = models.ForeignKey(Team, null=True, blank=True)

显然,用户不应该同时成为team_leader和team_member。我已将两个字段都设置为null / blank,因此我总是可以将其中一个留空。但是为了额外的预防措施,我希望在激活其他字段时完全禁用其中一个字段。

我知道disabled功能,但它只用于禁用表单上的字段。我希望通过完全禁用一个模型字段来消除任何篡改的可能性。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

class UserForm(ModelForm):
    def clean(self):
        cleaned_data = super(UserForm, self).clean()
        team_leader = cleaned_data.get('team_leader', None)
        team_member = cleaned_data.get('team_member', None)
        if team_leader and len(team_member)!=0:
             if team_leader in team_member:
                 raise forms.ValidationError("team_leader can't in team_member")

    class Meta:
        model = User
        fields = ['team_leader', 'team_member']

class UserAdmin(admin.ModelAdmin):
    form = UserForm