36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
# schemas/stu_score_schema.py
|
|
# 学生成绩模块的 Pydantic 模式
|
|
|
|
from decimal import Decimal
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class StuScoreBase(BaseModel):
|
|
"""成绩公共字段"""
|
|
stu_id: str = Field(..., max_length=15, description="学生编号")
|
|
exam_attempt: int = Field(default=1, ge=1, description="考试轮次")
|
|
exam_score: Decimal = Field(..., ge=0, le=100, description="成绩(0-100)")
|
|
score_level: Optional[str] = Field(default=None, max_length=10, description="成绩等级")
|
|
|
|
|
|
class StuScoreCreate(StuScoreBase):
|
|
"""新增成绩记录"""
|
|
pass
|
|
|
|
|
|
class StuScoreUpdate(BaseModel):
|
|
"""更新成绩记录:仅更新传入的字段"""
|
|
stu_id: Optional[str] = Field(default=None, max_length=15, description="学生编号")
|
|
exam_attempt: Optional[int] = Field(default=None, ge=1, description="考试轮次")
|
|
exam_score: Optional[Decimal] = Field(default=None, ge=0, le=100, description="成绩(0-100)")
|
|
score_level: Optional[str] = Field(default=None, max_length=10, description="成绩等级")
|
|
|
|
|
|
class StuScoreOut(StuScoreBase):
|
|
"""成绩响应模型(含自增 id 与软删除标记)"""
|
|
id: int
|
|
is_deleted: bool
|
|
|
|
model_config = ConfigDict(from_attributes=True) |