from app.core.base_schema import CommonSchema """试验执行 —— Pydantic 校验/序列化模型。""" from datetime import datetime from pydantic import BaseModel, ConfigDict, Field class TrialStudyBaseSchema(BaseModel): model_config = ConfigDict(from_attributes=True) trial_id: int = Field(..., description="所属试验") study_name: str = Field(..., description="研究点名称") site_id: int | None = Field(default=None, description="基地ID") year: int | None = Field(default=None, description="年份") block_count: int | None = Field(default=None, description="区组数") season: str | None = Field(default=None, description="季节") design_type: str | None = Field(default=None, description="设计类型(breeding_design_type)") remark: str | None = Field(default=None, description="备注") class TrialStudyCreateSchema(TrialStudyBaseSchema): pass class TrialStudyUpdateSchema(TrialStudyBaseSchema): trial_id: int | None = Field(default=None, description="所属试验") study_name: str | None = Field(default=None, description="研究点名称") site_id: int | None = Field(default=None, description="基地ID") year: int | None = Field(default=None, description="年份") block_count: int | None = Field(default=None, description="区组数") season: str | None = Field(default=None, description="季节") design_type: str | None = Field(default=None, description="设计类型(breeding_design_type)") remark: str | None = Field(default=None, description="备注") class TrialStudyOutSchema(TrialStudyBaseSchema): id: int uuid: str trial_name: str | None = None # 由 Service 层联表填充 study_name: str | None = None site_id: int | None = None year: int | None = None block_count: int | None = None season: str | None = None design_type: str | None = None remark: str | None = None created_time: datetime | None = None updated_time: datetime | None = None created_by: CommonSchema | None = None updated_by: CommonSchema | None = None class TrialStudyQueryParam(BaseModel): trial_id: int | None = Field(default=None, description="所属试验", json_schema_extra={"q": "eq"}) study_name: str | None = Field(default=None, description="研究点名称", json_schema_extra={"q": "like"}) site_id: int | None = Field(default=None, description="基地ID", json_schema_extra={"q": "eq"}) season: str | None = Field(default=None, description="季节", json_schema_extra={"q": "eq"}) design_type: str | None = Field(default=None, description="设计类型", json_schema_extra={"q": "eq"})