Files
SST/PythonProject/schema/student_schema.py
T

89 lines
2.3 KiB
Python
Raw Normal View History

2026-09-21 09:54:25 +08:00
from datetime import date
2026-09-21 18:04:38 +08:00
from typing import Self,List
2026-09-22 09:56:31 +08:00
from pydantic import BaseModel, field_serializer, field_validator,model_validator,ConfigDict
2026-09-21 09:54:25 +08:00
2026-09-21 15:10:45 +08:00
2026-09-21 09:54:25 +08:00
class StudentRequest(BaseModel):
class_id:int |None = None
2026-09-21 22:25:16 +08:00
stu_name:str
2026-09-21 09:54:25 +08:00
age:int |None = None
gender:str |None = None
2026-09-22 14:34:22 +08:00
id_card:str
2026-09-21 09:54:25 +08:00
native_place:str |None = None
2026-09-21 18:04:38 +08:00
birthday:date |None = None
2026-09-21 09:54:25 +08:00
school:str |None = None
major:str |None = None
degree:str |None = None
2026-09-21 18:04:38 +08:00
admission_date:date |None = None
graduation_date:date |None = None
2026-09-21 09:54:25 +08:00
@field_validator('age')
@classmethod
def check_age(cls, v):
if v is not None and v < 0:
raise ValueError('年龄不能为负数')
return v
@model_validator(mode='after')
def check_admission_graduation(self) -> Self:
if self.admission_date and self.graduation_date:
if self.admission_date > self.graduation_date:
raise ValueError ('入学日期不能晚于毕业日期')
return self
2026-09-21 15:10:45 +08:00
class StudentResponse(BaseModel):
code:int = 200
detail:str = 'ok'
stu_name:str
age:int
gender:str
progress:int
@field_serializer('progress')
2026-09-22 12:21:39 +08:00
def int_to_string(self,progress:int):
d1 ={
0:'学习中',
1:'求职中',
2:'已就业'
}
return d1.get(progress,'暂不明确')
2026-09-21 15:10:45 +08:00
class StugetResponse(BaseModel):
2026-09-22 09:56:31 +08:00
model_config = ConfigDict(from_attributes=True)
2026-09-21 15:10:45 +08:00
code:int = 200
detail:str = 'ok'
2026-09-22 10:39:41 +08:00
stu_id:int | None = None
2026-09-21 18:04:38 +08:00
class_id: int | None = None
stu_name: str | None = None
age: int | None = None
gender: str | None = None
2026-09-22 14:34:22 +08:00
id_card: str
2026-09-21 18:04:38 +08:00
native_place: str | None = None
birthday: date | None = None
school: str | None = None
major: str | None = None
degree: str | None = None
admission_date: date | None = None
graduation_date: date | None = None
progress: int = 0
@field_serializer('progress')
2026-09-22 11:49:44 +08:00
def int_to_string(self, progress: int):
2026-09-21 18:04:38 +08:00
d1 = {
0: '学习中',
1: '求职中',
2: '已就业'
}
return d1.get(progress, '暂不明确')
class StudentPageResponse(BaseModel):
code: int = 200
detail: str = "ok"
2026-09-21 15:10:45 +08:00
page: int
page_size: int
2026-09-21 22:25:16 +08:00
totals: int
2026-09-22 14:34:22 +08:00
data: List[StugetResponse]