python - 条件 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
布尔字段。设置此复选框时,不得选中password
and字段,因为它们的内容(或缺少内容)不重要。password2
相反,当未auto_password
设置复选框时password
,password2
必须选中 and。
有没有办法在需要时选择性地禁用 Django 表单检查?
谢谢您的帮助。
解决方案
你不能把它包含在你的逻辑中吗?
if not cd['auto_password'] and (cd['password'] != cd['password2']):
raise forms.ValidationError(_("Passwords don't match."))
推荐阅读
- python - 在 SymPy 中计算符号表达式并在 Julia 中将它们转换为数字
- javascript - 从javascript中的api响应转换为图像
- vue.js - 如何决定何时重新渲染/更新 Vuejs 组件中的元素?
- list - 如何从 Netlogo 中的代理创建一个有序的属性列表?
- javascript - 如何将所有东西都放在一个游戏功能中以运行石头剪刀布游戏
- python-asyncio - 如何在 Asyncio 中获得非阻塞 SSL 套接字?
- angular - How to enable / disable a button based on a checkbox being checked in Angular
- swift - 如何在 Alamofire 中将数据传递给字典
- c# - 反序列化时将字符串转换为 DateTime
- sql - 无法根据“不在其中”进行过滤