53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
# 正确
|
|||
|
|
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 对象转换
|
||
|
|
|
||
|
|
|
||
|
|
|