Files
student-management-system/schemas/stu_schema.py
T
2026-09-18 16:53:21 +08:00

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)