diff --git a/app/model/ReimburseModel.py b/app/model/ReimburseModel.py index 4b972d6..542ad37 100644 --- a/app/model/ReimburseModel.py +++ b/app/model/ReimburseModel.py @@ -1,6 +1,11 @@ -from sqlmodel import Field +from typing import Optional + +from pydantic import computed_field +from sqlalchemy.orm import selectinload +from sqlmodel import Field, Relationship, select from app.model.BasicModel import BasicModel +from app.model.ProjectModel import ProjectModel from app.utils.create_module_service import create_model_service @@ -9,8 +14,38 @@ class ReimburseModel(BasicModel, table=True): title: str = Field(default=None, description="标题") remarks: str = Field(default=None, description="备注信息") - proj_id: str = Field(default=None, description="所属项目") amount: float = Field(default=None, description="报销金额") + proj_id: str = Field( + default=None, + description="所属项目id", + foreign_key="pl_project.id", # 添加外键约束 + nullable=True + ) -ReimburseService = create_model_service(Cls=ReimburseModel) + proj_rel: Optional["ProjectModel"] = Relationship( + sa_relationship_kwargs={ + "foreign_keys": "ReimburseModel.proj_id", + "remote_side": "ProjectModel.id", + "uselist": False + } + ) + + @computed_field + @property + def project(self) -> Optional[ProjectModel]: + return self.proj_rel + + @project.setter + def project(self, value: Optional[ProjectModel]) -> None: + pass + + +ReimburseService = create_model_service( + Cls=ReimburseModel, + custom_query=lambda: select(ReimburseModel) + .options( + selectinload(ReimburseModel.proj_rel). + selectinload(ProjectModel.leader) + ) +)