89 lines
2.3 KiB
Python
89 lines
2.3 KiB
Python
from datetime import date
|
|
from typing import Self,List
|
|
from pydantic import BaseModel, field_serializer, field_validator,model_validator,ConfigDict
|
|
|
|
|
|
|
|
class StudentRequest(BaseModel):
|
|
class_id:int |None = None
|
|
stu_name:str
|
|
age:int |None = None
|
|
gender:str |None = None
|
|
id_card:str
|
|
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
|
|
@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
|
|
|
|
|
|
class StudentResponse(BaseModel):
|
|
code:int = 200
|
|
detail:str = 'ok'
|
|
stu_name:str
|
|
age:int
|
|
gender:str
|
|
progress:int
|
|
|
|
@field_serializer('progress')
|
|
def int_to_string(self,progress:int):
|
|
d1 ={
|
|
0:'学习中',
|
|
1:'求职中',
|
|
2:'已就业'
|
|
}
|
|
return d1.get(progress,'暂不明确')
|
|
|
|
class StugetResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
code:int = 200
|
|
detail:str = 'ok'
|
|
stu_id:int | None = None
|
|
class_id: int | None = None
|
|
stu_name: str | None = None
|
|
age: int | None = None
|
|
gender: str | None = None
|
|
id_card: str
|
|
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')
|
|
def int_to_string(self, progress: int):
|
|
d1 = {
|
|
0: '学习中',
|
|
1: '求职中',
|
|
2: '已就业'
|
|
}
|
|
return d1.get(progress, '暂不明确')
|
|
|
|
class StudentPageResponse(BaseModel):
|
|
code: int = 200
|
|
detail: str = "ok"
|
|
page: int
|
|
page_size: int
|
|
totals: int
|
|
data: List[StugetResponse]
|
|
|
|
|