diff --git a/dao/student.py b/dao/student.py index 021ad90..0030b49 100644 --- a/dao/student.py +++ b/dao/student.py @@ -22,3 +22,4 @@ def create_students(d: dict, db: Session): print(f"插入学生失败: {e}") return None +# def updet_students(): \ No newline at end of file diff --git a/models/student.py b/models/student.py index 881c9b8..fc73e95 100644 --- a/models/student.py +++ b/models/student.py @@ -10,7 +10,8 @@ class Student(Base): , comment = '学生编号,自增主键' ) student_no = Column(VARCHAR(50) - ,nullable = True) + ,nullable = True + ,unique = True) student_name = Column(VARCHAR(50)) class_id = Column(Integer ,ForeignKey('class_info_detail.id') diff --git a/schemas/student.py b/schemas/student.py index 6265446..213ae53 100644 --- a/schemas/student.py +++ b/schemas/student.py @@ -1,18 +1,40 @@ from pydantic import BaseModel from datetime import date +from pydantic import BaseModel, ConfigDict, Field, model_validator class StudentCreate(BaseModel): - student_no:str|None = None - student_name: str - class_id: int - consultant_id: int | None = None - native_place: str | None = None - graduation_school: str | None = None - major: str | None = None + student_no: str | None = Field(default=None, min_length=1, max_length=50) + student_name: str = Field(min_length=1, max_length=50) + class_id: int = Field(gt=0) + consultant_id: int | None = Field(default=None, gt=0) + native_place: str | None = Field(default=None, max_length=100) + graduation_school: str | None = Field(default=None, max_length=100) + major: str | None = Field(default=None, max_length=100) enrollment_date: date graduation_date: date | None = None - education: str | None = None - age: int - gender: str + education: str | None = Field(default=None, max_length=50) + age: int = Field(ge=0, le=150) + gender: str = Field(min_length=1, max_length=10) + @model_validator(mode="after") + def check_dates(self): + # 3. 新增时两个日期都已确定,可以直接校验先后顺序。 + if self.graduation_date and self.graduation_date < self.enrollment_date: + raise ValueError("毕业日期不能早于入学日期") + return self + +class StudentUpdate(BaseModel): + # 1. 默认值为 None 是为了允许省略字段,不代表每个字段都能清空。 + student_no: str | None = Field(default=None, min_length=1, max_length=50) + student_name: str | None = Field(default=None, min_length=1, max_length=50) + class_id: int | None = Field(default=None, gt=0) + consultant_id: int | None = Field(default=None, gt=0) + native_place: str | None = Field(default=None, max_length=100) + graduation_school: str | None = Field(default=None, max_length=100) + major: str | None = Field(default=None, max_length=100) + enrollment_date: date | None = None + graduation_date: date | None = None + education: str | None = Field(default=None, max_length=50) + age: int | None = Field(default=None, ge=0, le=150) + gender: str | None = Field(default=None, min_length=1, max_length=10)