Метод full_clean
собирает все ошибки, возникшие на нескольких этапах.
Вы можете проверить, как он вызывает ваш метод clean
, здесь: https://github.com/django/django/blob/master/django/db/models/base.py#L1150
К счастью, оригинальные исключениясохраняются внутри error_dict
.
Вы можете попробовать это:
inst = MyDjangoModel(name="Foo", attribute=0)
try:
inst.full_clean()
except ValidationError as exc:
for original_exc in exc.error_dict['__all__']:
if isinstance(original_exc, MyDjangoModel.CustomValidationError):
print("Hello!")
elif isinstance(original_exc, ValidationError):
print("Bye!")
Предполагая, что CustomValidationError
вызывается только из метода clean
.В противном случае вам также необходимо проверить другие ключи в error_dict
.
Обратите внимание, что порядок if
s важен: второй также будет True, если первый - True.