From 98af276d6945f065f5fc7909e59c53f9fa9459e3 Mon Sep 17 00:00:00 2001 From: martsforever Date: Sat, 23 Aug 2025 10:42:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20UserServiceModel=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=81=8C=E4=BD=8D=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/model/UserModel.py | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/app/model/UserModel.py b/app/model/UserModel.py index 3c83200..613fcb9 100644 --- a/app/model/UserModel.py +++ b/app/model/UserModel.py @@ -1,8 +1,12 @@ from enum import Enum +from typing import Optional -from sqlmodel import Field +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.PosModel import PosModel from app.utils.create_module_service import create_model_service @@ -35,5 +39,33 @@ class UserServiceModel(PublicUser, table=True): __tablename__ = "pl_user" __table_args__ = {'extend_existing': True} + pos_code: str = Field( + default=None, + description="用户职位编码", + foreign_key="pl_pos.code", # 添加外键约束 + nullable=True + ) -UserService = create_model_service(UserServiceModel) + position: Optional["PosModel"] = Relationship( + sa_relationship_kwargs={ + "foreign_keys": "UserServiceModel.pos_code", + "remote_side": "PosModel.code", + "uselist": False + } + ) + + @computed_field + @property + def pos_name(self) -> Optional[str]: + return self.position.name if self.position else None + + @pos_name.setter + def pos_name(self, value: Optional[str]) -> None: + pass + + +UserService = create_model_service( + Cls=UserServiceModel, + custom_query=(lambda: select(UserServiceModel) + .options(selectinload(UserServiceModel.position))) +)