我的forms.py
文件中包含以下代码。
class RegisterForm(forms.Form):
employee_id = forms.CharField(label='Employee ID', max_length=30)
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Retype Password', widget=forms.PasswordInput)
first_name = forms.CharField(label='First Name', max_length=100)
last_name = forms.CharField(label='Last Name', max_length=100)
designation = forms.CharField(max_length=100)
department = forms.ChoiceField(choices=[(x, x) for x in departments])
mobile = forms.CharField(max_length=50)
def clean_password2(self):
password1 = self.cleaned_data.get('password1')
password2 = self.cleaned_data.get('password2')
if password1 and password2:
if password1 != password2:
raise forms.ValidationError(("The two password fields didn't match."))
elif password1 == '' or password2 == '':
raise forms.ValidationError(("The password cannot be blank"))
return password2
我有两个查询。
我了解该clean_password2
方法中的代码如何工作,但不了解为什么调用该方法clean_password2
,如果2
从名称中删除,为什么它不起作用?
我在另一台服务器上有一个脚本,我想在其中发送请求employee_id
并获取该ID是否可用或已经存在的响应。如何创建不允许我提交ID不可用的表单的方法?
另外,如果有人向我提供阅读材料以使您获得扎实的掌握,那将非常有帮助Django Forms
。
最坚实的文档Django的是那些官方Django表单和他们的验证
1)在文档中
该
clean_<fieldname>()
方法在表单子类上被调用–在该子类中<fieldname>
被表单字段属性的名称替换。此方法执行特定于该特定属性的任何清理,而与该字段的类型无关。此方法未传递任何参数。您将需要在self.cleaned_data中查找该字段的值,并记住这时它将是一个Python对象,而不是表单中提交的原始字符串(它将在cleaned_data中,因为常规字段clean()方法,上面的数据已经清除了一次)。
这意味着仅当它具有相应的字段时,才会调用以clean开头的验证方法。这就是为什么password2
行得通而password
不行的原因。
2)您可以使用clean_<fieldname>
。这是例子
def clean_employee_id(self):
value = self.cleaned_data['employee_id']
# send request to your remote server. I would suggest using requests library
if remote_check_is_successful:
return value
raise ValidationError('invalid employee_id')
考虑到除了验证本身以外,可能还会存在一些网络错误,如果远程服务器缓慢地以表单提交方式答复也将花费很长时间,并且这不是很友好。但是,这整个另一个问题
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句