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 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(cls,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' class_id: int | None = None stu_name: str | None = None age: int | None = None gender: str | None = None 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(cls, 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]