使用 self.add_error() 和引发 ValidationError() 之间有什么区别?
What are the differences between using self.add_error() and raising a ValidationError()?
您可以通过两种方式抛出验证错误。第一个是 self.add_error()
,第二个是 raise ValidationError()
.
我读到,当你使用 self.add_error('field1','description here')
时,field1
也会自动从 cleaned_data
列表中删除,我假设还会添加一个 ValidationError object self.errors
列表,这是正确的吗?
但是当您不选择使用 self.add_error
而是选择使用 raise ValidationError
时会发生什么?这个 object 是不是也在后台自动添加到 errors
列表中?您将如何在正确的无效字段下将此错误消息显示为标题?
谢谢
如果您引发错误,该方法的控制流和该方法的调用者将停止,直到有一个方法跨越 try
-except
,并捕获相应的例外。
但有时一个字段可能包含 多个 错误。例如,如果您有密码,您可能想要添加错误,因为它太短,不包含数字,小写,and/or 大写。
然后你可以这样实现:
def clean_password(self):
pwd = self.cleaned_data['password']
if len(pwd) < 10:
self.add_error('password', 'The password is too short.')
if not any(c.isupper() for c in pwd):
self.add_error('password', 'The password should contain an uppercase character.')
if not any(c.islower() for c in pwd):
self.add_error('password', 'The password should contain an lowercase character.')
if not any(c.isdigit() for c in pwd):
self.add_error('password', 'The password should contain an digit.')
return pwd
如果您要为其中之一提出 ValidationError
,它不能添加 多个 密码可能存在的问题。
然而,您可以将错误列表传递给 ValidationError
数据构造函数,因此您可以使用这两个可互换的。
您可以通过两种方式抛出验证错误。第一个是 self.add_error()
,第二个是 raise ValidationError()
.
我读到,当你使用 self.add_error('field1','description here')
时,field1
也会自动从 cleaned_data
列表中删除,我假设还会添加一个 ValidationError object self.errors
列表,这是正确的吗?
但是当您不选择使用 self.add_error
而是选择使用 raise ValidationError
时会发生什么?这个 object 是不是也在后台自动添加到 errors
列表中?您将如何在正确的无效字段下将此错误消息显示为标题?
谢谢
如果您引发错误,该方法的控制流和该方法的调用者将停止,直到有一个方法跨越 try
-except
,并捕获相应的例外。
但有时一个字段可能包含 多个 错误。例如,如果您有密码,您可能想要添加错误,因为它太短,不包含数字,小写,and/or 大写。
然后你可以这样实现:
def clean_password(self):
pwd = self.cleaned_data['password']
if len(pwd) < 10:
self.add_error('password', 'The password is too short.')
if not any(c.isupper() for c in pwd):
self.add_error('password', 'The password should contain an uppercase character.')
if not any(c.islower() for c in pwd):
self.add_error('password', 'The password should contain an lowercase character.')
if not any(c.isdigit() for c in pwd):
self.add_error('password', 'The password should contain an digit.')
return pwd
如果您要为其中之一提出 ValidationError
,它不能添加 多个 密码可能存在的问题。
然而,您可以将错误列表传递给 ValidationError
数据构造函数,因此您可以使用这两个可互换的。