首页 > 解决方案 > 条件 Django 表单验证

问题描述

对于 Django 项目,我有一个自定义的用户模型:

class User(AbstractUser):
    username = None
    email = models.EmailField(_('e-mail address'),
                              unique=True)
    first_name = models.CharField(_('first name'),
                                  max_length=150,
                                  blank=False)
    last_name = models.CharField(_('last name'),
                                  max_length=150,
                                  blank=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name', 'last_name']

    objects = UserManager()

    def __str__(self):
        return self.email

我正在创建一个新的用户注册表单:

class UserRegistrationForm(forms.ModelForm):
    auto_password = forms.BooleanField(label=_('Generate password and send by mail'),
                                       required=False,
                                       initial=True)
    password = forms.CharField(label=_('Password'),
                               widget=forms.PasswordInput)
    password2 = forms.CharField(label=_('Repeat password'),
                                widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ('email', 'first_name', 'last_name', 'is_staff',
                  'is_superuser')

    def clean_password2(self):
        cd = self.cleaned_data
        if cd['password'] != cd['password2']:
            raise forms.ValidationError(_("Passwords don't match."))
        return cd['password2']

我的表单有一个auto_password布尔字段。设置此复选框时,不得选中passwordand字段,因为它们的内容(或缺少内容)不重要。password2相反,当未auto_password设置复选框时passwordpassword2必须选中 and。

有没有办法在需要时选择性地禁用 Django 表单检查?

谢谢您的帮助。

标签: pythondjangoformsvalidationmodel

解决方案


你不能把它包含在你的逻辑中吗?

if not cd['auto_password'] and (cd['password'] != cd['password2']):
    raise forms.ValidationError(_("Passwords don't match."))

推荐阅读