41 lines
1.6 KiB
Python
41 lines
1.6 KiB
Python
from pydantic import BaseModel
|
|
from datetime import date
|
|
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
|
|
class StudentCreate(BaseModel):
|
|
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 = 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):
|
|
# 全部设为可选,前端只传需要修改的字段
|
|
student_no: str | None = None
|
|
student_name: str | None = None
|
|
class_id: int | None = None
|
|
consultant_id: int | None = None
|
|
native_place: str | None = None
|
|
graduation_school: str | None = None
|
|
major: str | None = None
|
|
enrollment_date: date | None = None
|
|
graduation_date: date | None = None
|
|
education: str | None = None
|
|
age: int | None = None
|
|
gender: str | None = None
|
|
|