# 正确 from pydantic import Field from datetime import datetime from typing import Optional from pydantic import BaseModel, field_validator # --------------------请求体模型----------------------------- # 用于增加1行数据# 加了软删除标签 class TeacherAdd(BaseModel): teacher_id:int=Field(...,ge=1,description='教师ID是整数类型') class_id:int=Field(...,ge=1,description='班级ID是整数类型') teacher_name:str=Field(...,description='教师姓名') job_name:str=Field(...,min_length=2,description='主讲老师、班主任、助教') is_deleted:int=Field(0,ge=0,le=0,description='只能输入0,0代表未删除,1代表已经被软删除') @field_validator("job_name") @classmethod def validate_job_name(cls, v): """校验 job_name 必须是 主讲/班主任/助教 之一""" allowed = ["主讲老师", "班主任", "助教"] if v not in allowed: raise ValueError(f"job_name 必须是 {allowed} 之一,当前值: {v}") return v # 用于更新数据 class TeacherUpdate(BaseModel): class_id: Optional[int] = Field(None, ge=1, description='班级ID是整数类型') # ge=1 只对非 None 的值生效 teacher_name: Optional[str] = Field(None, description='教师姓名') job_name: Optional[str] = Field(None,min_length=2, description='主讲老师、班主任、助教') @field_validator("job_name") @classmethod def validate_job_name(cls, v): """校验 job_name 必须是 主讲/班主任/助教 之一""" allowed = ["主讲老师", "班主任", "助教"] if v not in allowed: raise ValueError(f"job_name 必须是 {allowed} 之一,当前值: {v}") return v # --------------------- 响应模型 ---------------------------- class TeacherResponse(BaseModel): teacher_id: int class_id: int teacher_name: str job_name: str class Config: # 告诉 Pydantic:"可以从任意对象的属性中读取数据,而不只是从字典中读取。" from_attributes = True # 支持 ORM 对象转换