feat: PosModel 关联查询得到父职位信息

This commit is contained in:
martsforever
2025-08-23 10:07:11 +08:00
parent 8a7312105f
commit ff3d6b24a3
2 changed files with 41 additions and 28 deletions
+2
View File
@@ -63,11 +63,13 @@ def add_app_middlewares(app: FastAPI):
try: try:
response = await call_next(request) response = await call_next(request)
except HTTPException as e: except HTTPException as e:
print(e)
if e.status_code == status.HTTP_401_UNAUTHORIZED: if e.status_code == status.HTTP_401_UNAUTHORIZED:
return JSONResponse(content={"message": e.detail}, status_code=status.HTTP_401_UNAUTHORIZED) return JSONResponse(content={"message": e.detail}, status_code=status.HTTP_401_UNAUTHORIZED)
else: else:
return JSONResponse(content={"message": e.detail}, status_code=status.HTTP_500_INTERNAL_SERVER_ERROR) return JSONResponse(content={"message": e.detail}, status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)
except Exception as e: except Exception as e:
print(e)
return JSONResponse(content={"message": str(e)}, status_code=status.HTTP_500_INTERNAL_SERVER_ERROR) return JSONResponse(content={"message": str(e)}, status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)
return response return response
+39 -28
View File
@@ -1,7 +1,8 @@
from typing import Optional from typing import Optional
from pydantic import computed_field from pydantic import computed_field
from sqlmodel import Field, Relationship from sqlalchemy.orm import selectinload
from sqlmodel import Field, Relationship, select
from app.model.BasicModel import BasicModel from app.model.BasicModel import BasicModel
from app.model.OrgModel import OrgModel from app.model.OrgModel import OrgModel
@@ -21,7 +22,7 @@ class PosModel(BasicModel, table=True):
parent_code: str = Field( parent_code: str = Field(
default=None, default=None,
description="职位编码", description="父职位编码",
foreign_key="pl_pos.code", # 添加外键约束 foreign_key="pl_pos.code", # 添加外键约束
nullable=True nullable=True
) )
@@ -37,36 +38,46 @@ class PosModel(BasicModel, table=True):
@computed_field @computed_field
@property @property
def parent_name(self) -> Optional[str]: def parent_name(self) -> Optional[str]:
return self.parent.name if self.parent else None try:
return self.parent.name if self.parent else None
except:
return None
@parent_name.setter @parent_name.setter
def parent_name(self, value: Optional[str]) -> None: def parent_name(self, value: Optional[str]) -> None:
pass pass
# /*---------------------------------------organization_code-------------------------------------------*/ # # /*---------------------------------------organization_code-------------------------------------------*/
#
# organization_code: str = Field(
# default=None,
# description="所属组织编码",
# foreign_key="pl_org.code", # 添加外键约束
# nullable=True
# )
#
# organization: Optional["OrgModel"] = Relationship(
# sa_relationship_kwargs={
# "foreign_keys": "PosModel.organization_code",
# "remote_side": "OrgModel.code",
# "uselist": False
# }
# )
#
# @computed_field
# @property
# def organization_name(self) -> Optional[str]:
# try:
# return self.organization.name if self.organization else None
# except:
# return None
#
# @organization_name.setter
# def organization_name(self, value: Optional[str]) -> None:
# pass
organization_code: str = Field(
default=None,
description="所属组织编码",
foreign_key="pl_org.code", # 添加外键约束
nullable=True
)
organization: Optional["OrgModel"] = Relationship( PosService = create_model_service(
sa_relationship_kwargs={ Cls=PosModel,
"foreign_keys": "PosModel.organization_code", custom_query=lambda: select(PosModel).options(selectinload(PosModel.parent)),
"remote_side": "OrgModel.code", )
"uselist": False
}
)
@computed_field
@property
def organization_name(self) -> Optional[str]:
return self.organization.name if self.organization else None
@organization_name.setter
def organization_name(self, value: Optional[str]) -> None:
pass
PosService = create_model_service(PosModel)