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:
response = await call_next(request)
except HTTPException as e:
print(e)
if e.status_code == status.HTTP_401_UNAUTHORIZED:
return JSONResponse(content={"message": e.detail}, status_code=status.HTTP_401_UNAUTHORIZED)
else:
return JSONResponse(content={"message": e.detail}, status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)
except Exception as e:
print(e)
return JSONResponse(content={"message": str(e)}, status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)
return response
+38 -27
View File
@@ -1,7 +1,8 @@
from typing import Optional
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.OrgModel import OrgModel
@@ -21,7 +22,7 @@ class PosModel(BasicModel, table=True):
parent_code: str = Field(
default=None,
description="职位编码",
description="父职位编码",
foreign_key="pl_pos.code", # 添加外键约束
nullable=True
)
@@ -37,36 +38,46 @@ class PosModel(BasicModel, table=True):
@computed_field
@property
def parent_name(self) -> Optional[str]:
try:
return self.parent.name if self.parent else None
except:
return None
@parent_name.setter
def parent_name(self, value: Optional[str]) -> None:
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(
sa_relationship_kwargs={
"foreign_keys": "PosModel.organization_code",
"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)
PosService = create_model_service(
Cls=PosModel,
custom_query=lambda: select(PosModel).options(selectinload(PosModel.parent)),
)