From 5d8c822fdee5da68b45a9545cd127f0d5a548784 Mon Sep 17 00:00:00 2001 From: negodinaarina Date: Mon, 12 May 2025 14:49:13 +0300 Subject: [PATCH 1/2] feat: check if object exists during validate_unique_constraints() only if query is not empty --- fastapi_sqlalchemy_toolkit/model_manager.py | 31 +++++++++++---------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/fastapi_sqlalchemy_toolkit/model_manager.py b/fastapi_sqlalchemy_toolkit/model_manager.py index 06a9796..2fa9f3a 100644 --- a/fastapi_sqlalchemy_toolkit/model_manager.py +++ b/fastapi_sqlalchemy_toolkit/model_manager.py @@ -1090,22 +1090,23 @@ async def validate_unique_constraints( """ for unique_constraint in self.unique_constraints: query = {} - for field in unique_constraint: - if in_obj[field] is not None: - query[field] = in_obj[field] - object_exists = await self.exists( - session, **query, where=(self.model.id != in_obj.get("id")) - ) - if object_exists: - conflicting_fields = ", ".join(unique_constraint) - raise HTTPException( - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, - detail=( - f"{self.model.__tablename__} с такими " - + conflicting_fields - + " уже существует." - ), + if query: + for field in unique_constraint: + if in_obj[field] is not None: + query[field] = in_obj[field] + object_exists = await self.exists( + session, **query, where=(self.model.id != in_obj.get("id")) ) + if object_exists: + conflicting_fields = ", ".join(unique_constraint) + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=( + f"{self.model.__tablename__} с такими " + + conflicting_fields + + " уже существует." + ), + ) async def validate_nullable_unique_constraints( self, session: AsyncSession, in_obj: ModelDict From 277da4ec19d72b97cf4b8819cd158afa2e2f0bb4 Mon Sep 17 00:00:00 2001 From: negodinaarina Date: Mon, 12 May 2025 15:30:32 +0300 Subject: [PATCH 2/2] fix: ... --- fastapi_sqlalchemy_toolkit/model_manager.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fastapi_sqlalchemy_toolkit/model_manager.py b/fastapi_sqlalchemy_toolkit/model_manager.py index 2fa9f3a..43a4986 100644 --- a/fastapi_sqlalchemy_toolkit/model_manager.py +++ b/fastapi_sqlalchemy_toolkit/model_manager.py @@ -1090,10 +1090,10 @@ async def validate_unique_constraints( """ for unique_constraint in self.unique_constraints: query = {} + for field in unique_constraint: + if in_obj[field] is not None: + query[field] = in_obj[field] if query: - for field in unique_constraint: - if in_obj[field] is not None: - query[field] = in_obj[field] object_exists = await self.exists( session, **query, where=(self.model.id != in_obj.get("id")) )