feat: 每个model都可以按需控制自己是否需要级联查询出来关联信息

This commit is contained in:
martsforever
2025-08-24 11:15:39 +08:00
parent 3c9153d9f6
commit 5e000d6f3d
6 changed files with 53 additions and 22 deletions
+5 -3
View File
@@ -34,7 +34,10 @@ class ApproveModel(PublicApproveModel, table=True):
@computed_field @computed_field
@property @property
def project(self) -> Optional[ProjectModel]: def project(self) -> Optional[ProjectModel]:
return self.proj_rel try:
return self.proj_rel
except:
return None
@project.setter @project.setter
def project(self, value: Optional[ProjectModel]) -> None: def project(self, value: Optional[ProjectModel]) -> None:
@@ -45,7 +48,6 @@ ApproveService = create_model_service(
Cls=ApproveModel, Cls=ApproveModel,
custom_query=lambda: select(ApproveModel) custom_query=lambda: select(ApproveModel)
.options( .options(
selectinload(ApproveModel.proj_rel). selectinload(ApproveModel.proj_rel)
selectinload(ProjectModel.leader)
) )
) )
+4 -1
View File
@@ -43,7 +43,10 @@ class OrgModel(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:
+4 -1
View File
@@ -39,7 +39,10 @@ class ProjectModel(BasicModel, table=True):
@computed_field @computed_field
@property @property
def leader_name(self) -> Optional[str]: def leader_name(self) -> Optional[str]:
return self.leader.full_name if self.leader else None try:
return self.leader.full_name if self.leader else None
except:
return None
@leader_name.setter @leader_name.setter
def leader_name(self, value: Optional[str]) -> None: def leader_name(self, value: Optional[str]) -> None:
+18 -9
View File
@@ -40,7 +40,10 @@ class ReimburseModel(BasicModel, table=True):
@computed_field @computed_field
@property @property
def project(self) -> Optional[ProjectModel]: def project(self) -> Optional[ProjectModel]:
return self.proj_rel try:
return self.proj_rel
except:
return None
@project.setter @project.setter
def project(self, value: Optional[ProjectModel]) -> None: def project(self, value: Optional[ProjectModel]) -> None:
@@ -59,7 +62,10 @@ class ReimburseModel(BasicModel, table=True):
@computed_field @computed_field
@property @property
def travel_list(self) -> Optional[List["ReimburseTravelModel"]]: def travel_list(self) -> Optional[List["ReimburseTravelModel"]]:
return self.travel_list_rel try:
return self.travel_list_rel
except:
return None
@travel_list.setter @travel_list.setter
def travel_list(self, value: Optional[List["ReimburseTravelModel"]]) -> None: def travel_list(self, value: Optional[List["ReimburseTravelModel"]]) -> None:
@@ -77,7 +83,10 @@ class ReimburseModel(BasicModel, table=True):
@computed_field @computed_field
@property @property
def other_list(self) -> Optional[List["ReimburseOtherModel"]]: def other_list(self) -> Optional[List["ReimburseOtherModel"]]:
return self.other_list_rel try:
return self.other_list_rel
except:
return None
@other_list.setter @other_list.setter
def other_list(self, value: Optional[List["ReimburseOtherModel"]]) -> None: def other_list(self, value: Optional[List["ReimburseOtherModel"]]) -> None:
@@ -119,7 +128,10 @@ class ReimburseModel(BasicModel, table=True):
@computed_field @computed_field
@property @property
def approve(self) -> Optional[ApproveModel]: def approve(self) -> Optional[ApproveModel]:
return self.approve_rel try:
return self.approve_rel
except:
return None
@approve.setter @approve.setter
def approve(self, value: Optional[ApproveModel]) -> None: def approve(self, value: Optional[ApproveModel]) -> None:
@@ -130,14 +142,11 @@ ReimburseService = create_model_service(
Cls=ReimburseModel, Cls=ReimburseModel,
custom_query=lambda: select(ReimburseModel) custom_query=lambda: select(ReimburseModel)
.options( .options(
selectinload(ReimburseModel.proj_rel). selectinload(ReimburseModel.proj_rel),
selectinload(ProjectModel.leader),
selectinload(ReimburseModel.travel_list_rel), selectinload(ReimburseModel.travel_list_rel),
selectinload(ReimburseModel.other_list_rel), selectinload(ReimburseModel.other_list_rel),
selectinload(ReimburseModel.approve_rel). selectinload(ReimburseModel.approve_rel)
selectinload(ApproveModel.proj_rel).
selectinload(ProjectModel.leader),
) )
) )
+9 -4
View File
@@ -34,7 +34,10 @@ class RelProjUserModel(BasicModel, table=True):
@computed_field @computed_field
@property @property
def user(self) -> Optional[UserServiceModel]: def user(self) -> Optional[UserServiceModel]:
return self.user_rel try:
return self.user_rel
except:
return None
@user.setter @user.setter
def user(self, value: Optional[UserServiceModel]) -> None: def user(self, value: Optional[UserServiceModel]) -> None:
@@ -60,7 +63,10 @@ class RelProjUserModel(BasicModel, table=True):
@computed_field @computed_field
@property @property
def project(self) -> Optional[ProjectModel]: def project(self) -> Optional[ProjectModel]:
return self.proj_rel try:
return self.proj_rel
except:
return None
@project.setter @project.setter
def project(self, value: Optional[ProjectModel]) -> None: def project(self, value: Optional[ProjectModel]) -> None:
@@ -72,8 +78,7 @@ RelProjUserService = create_model_service(
custom_query=lambda: select(RelProjUserModel) custom_query=lambda: select(RelProjUserModel)
.options( .options(
selectinload(RelProjUserModel.user_rel). selectinload(RelProjUserModel.user_rel).
selectinload(UserServiceModel.position). selectinload(UserServiceModel.position)
selectinload(PosModel.organization)
) )
.options( .options(
selectinload(RelProjUserModel.proj_rel). selectinload(RelProjUserModel.proj_rel).
+13 -4
View File
@@ -58,7 +58,10 @@ class UserServiceModel(PublicUser, table=True):
@computed_field @computed_field
@property @property
def pos(self) -> Optional[PosModel]: def pos(self) -> Optional[PosModel]:
return self.position try:
return self.position
except:
return None
@pos.setter @pos.setter
def pos(self, value: Optional[PosModel]) -> None: def pos(self, value: Optional[PosModel]) -> None:
@@ -67,7 +70,10 @@ class UserServiceModel(PublicUser, table=True):
@computed_field @computed_field
@property @property
def pos_name(self) -> Optional[str]: def pos_name(self) -> Optional[str]:
return self.position.name if self.position else None try:
return self.position.name if self.position else None
except:
return None
@pos_name.setter @pos_name.setter
def pos_name(self, value: Optional[str]) -> None: def pos_name(self, value: Optional[str]) -> None:
@@ -76,8 +82,11 @@ class UserServiceModel(PublicUser, table=True):
@computed_field @computed_field
@property @property
def org_name(self) -> Optional[str]: def org_name(self) -> Optional[str]:
organization = self.position.organization if self.position else None try:
return organization.name if organization else None organization = self.position.organization if self.position else None
return organization.name if organization else None
except:
return None
@org_name.setter @org_name.setter
def org_name(self, value: Optional[str]) -> None: def org_name(self, value: Optional[str]) -> None: