假设我有一个Django模型:
class MyDjangoModel(models.Model):
name = models.CharField(max_length=200)
attribute = models.IntegerField()
class CustomValidationError(ValidationError):
pass
def clean(self):
if self.attribute < 1:
raise CustomValidationError("Attribute should be > 1!")
if len(self.name) > 20:
raise ValidationError("Name too long!")
我想创建模型示例并验证它:
inst = MyDjangoModel(name="Foo", attribute=0)
try:
inst.full_clean()
except CustomValidationError:
print("Hello!")
except ValidationError:
print("Bye!")
但是上面的代码永远不会打印"Hello!"
,因为full_clean
方法只生成ValidationError
。
谁能建议一下,如何调用full_clean
并检查是否引发了ValidationError
子类异常?
2条答案
按热度按时间wr98u20j1#
full_clean
方法收集在几个阶段上产生的所有错误。你可以在这里检查它是如何调用你的
clean
方法的:https://github.com/django/django/blob/master/django/db/models/base.py#L1150幸运的是,原始异常保留在
error_dict
中。你可以试试这个:
假设
CustomValidationError
只从clean
方法中引发。否则,您还需要检查error_dict
中的其他键。请注意,
if
s的顺序很重要:如果第一个为真,则第二个也为真。k3bvogb12#
使用
except Exception as e:
时的另一种方法:注:这是一个通用的答案,当一个特定类型的错误被提出时做一些事情