53 lines
2.7 KiB
Python
53 lines
2.7 KiB
Python
# schemas/stu_schema.py
|
|
# 学生信息模块的 Pydantic 模式:请求体校验 & 响应序列化
|
|
|
|
from datetime import date
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class StuInfoBase(BaseModel):
|
|
"""学生信息公共字段"""
|
|
cls_id: str = Field(..., max_length=15, description="所属班级编号")
|
|
name: str = Field(..., max_length=20, description="姓名")
|
|
gender: Optional[str] = Field(default="男", max_length=1, description="性别")
|
|
age: Optional[int] = Field(default=None, ge=0, description="年龄")
|
|
hometown: Optional[str] = Field(default=None, max_length=50, description="籍贯")
|
|
grad_school: Optional[str] = Field(default=None, max_length=50, description="毕业院校")
|
|
major: Optional[str] = Field(default=None, max_length=50, description="专业")
|
|
education: Optional[str] = Field(default=None, max_length=20, description="学历")
|
|
enr_date: Optional[date] = Field(default=None, description="入学日期")
|
|
grad_date: Optional[date] = Field(default=None, description="毕业日期")
|
|
advisor_id: Optional[str] = Field(default=None, max_length=15, description="顾问编号")
|
|
state: Optional[str] = Field(default="在读", max_length=10, description="状态")
|
|
|
|
|
|
class StuInfoCreate(StuInfoBase):
|
|
"""新增学生时,id(学号)必填"""
|
|
id: str = Field(..., max_length=15, description="学生编号(主键)")
|
|
|
|
|
|
class StuInfoUpdate(BaseModel):
|
|
"""更新学生信息:所有字段均可选,仅更新传入的字段"""
|
|
cls_id: Optional[str] = Field(default=None, max_length=15, description="所属班级编号")
|
|
name: Optional[str] = Field(default=None, max_length=20, description="姓名")
|
|
gender: Optional[str] = Field(default=None, max_length=1, description="性别")
|
|
age: Optional[int] = Field(default=None, ge=0, description="年龄")
|
|
hometown: Optional[str] = Field(default=None, max_length=50, description="籍贯")
|
|
grad_school: Optional[str] = Field(default=None, max_length=50, description="毕业院校")
|
|
major: Optional[str] = Field(default=None, max_length=50, description="专业")
|
|
education: Optional[str] = Field(default=None, max_length=20, description="学历")
|
|
enr_date: Optional[date] = Field(default=None, description="入学日期")
|
|
grad_date: Optional[date] = Field(default=None, description="毕业日期")
|
|
advisor_id: Optional[str] = Field(default=None, max_length=15, description="顾问编号")
|
|
state: Optional[str] = Field(default=None, max_length=10, description="状态")
|
|
|
|
|
|
class StuInfoOut(StuInfoBase):
|
|
"""学生信息响应模型(含 id 与软删除标记)"""
|
|
id: str
|
|
is_deleted: int
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|