diff --git a/tortoise/exceptions.py b/tortoise/exceptions.py index 13422b153..7464d7e28 100644 --- a/tortoise/exceptions.py +++ b/tortoise/exceptions.py @@ -1,3 +1,9 @@ +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from tortoise import Model, Type + + class BaseORMException(Exception): """ Base ORM Exception. @@ -52,12 +58,26 @@ class MultipleObjectsReturned(OperationalError): and more than one object is returned. """ + def __init__(self, model: "Type[Model]", *args): + self.model: "Type[Model]" = model + super().__init__(*args) + + def __str__(self): + return f'Multiple objects returned for "{self.model.__name__}", expected exactly one' + class DoesNotExist(OperationalError): """ The DoesNotExist exception is raised when expecting data, such as a ``.get()`` operation. """ + def __init__(self, model: "Type[Model]", *args): + self.model: "Type[Model]" = model + super().__init__(*args) + + def __str__(self): + return f'Object "{self.model.__name__}" does not exist' + class IncompleteInstanceError(OperationalError): """ diff --git a/tortoise/queryset.py b/tortoise/queryset.py index 00df3bba1..f30e945cf 100644 --- a/tortoise/queryset.py +++ b/tortoise/queryset.py @@ -1071,9 +1071,9 @@ async def _execute(self) -> List[MODEL]: return instance_list[0] if not instance_list: if self._raise_does_not_exist: - raise DoesNotExist("Object does not exist") + raise DoesNotExist(self.model) return None # type: ignore - raise MultipleObjectsReturned("Multiple objects returned, expected exactly one") + raise MultipleObjectsReturned(self.model) return instance_list @@ -1585,9 +1585,9 @@ async def _execute(self) -> Union[List[Any], Tuple]: return lst_values[0] if not lst_values: if self.raise_does_not_exist: - raise DoesNotExist("Object does not exist") + raise DoesNotExist(self.model) return None # type: ignore - raise MultipleObjectsReturned("Multiple objects returned, expected exactly one") + raise MultipleObjectsReturned(self.model) return lst_values @@ -1717,9 +1717,9 @@ async def _execute(self) -> Union[List[dict], Dict]: return result[0] if not result: if self.raise_does_not_exist: - raise DoesNotExist("Object does not exist") + raise DoesNotExist(self.model) return None # type: ignore - raise MultipleObjectsReturned("Multiple objects returned, expected exactly one") + raise MultipleObjectsReturned(self.model) return result