from app.core.base_schema import CommonSchema """性状观测 —— Pydantic 校验/序列化模型。""" from datetime import datetime from pydantic import BaseModel, ConfigDict, Field class TraitObservationBaseSchema(BaseModel): model_config = ConfigDict(from_attributes=True) evaluation_id: int | None = Field(default=None, description="所属鉴定") tree_id: int | None = Field(default=None, description="单株") combination_id: int | None = Field(default=None, description="杂交组合") trait_id: int = Field(..., description="性状") evaluate_year: int | None = Field(default=None, description="观测年份") value_numeric: float | None = Field(default=None, description="数值") value_text: str | None = Field(default=None, description="文本值") value_date: str | None = Field(default=None, description="日期值") stage: str | None = Field(default=None, description="观测发育阶段(juvenile/evaluation,缺省继承bre_trait.stage)") remark: str | None = Field(default=None, description="备注") class TraitObservationCreateSchema(TraitObservationBaseSchema): pass class TraitObservationUpdateSchema(TraitObservationBaseSchema): evaluation_id: int | None = Field(default=None, description="所属鉴定") tree_id: int | None = Field(default=None, description="单株") combination_id: int | None = Field(default=None, description="杂交组合") trait_id: int | None = Field(default=None, description="性状") evaluate_year: int | None = Field(default=None, description="观测年份") value_numeric: float | None = Field(default=None, description="数值") value_text: str | None = Field(default=None, description="文本值") value_date: str | None = Field(default=None, description="日期值") stage: str | None = Field(default=None, description="观测发育阶段(juvenile/evaluation,缺省继承bre_trait.stage)") remark: str | None = Field(default=None, description="备注") class TraitObservationOutSchema(TraitObservationBaseSchema): id: int uuid: str evaluation_name: str | None = None # 由 Service 层联表填充 tree_name: str | None = None # 由 Service 层联表填充 combination_name: str | None = None # 由 Service 层联表填充 trait_name: str | None = None # 由 Service 层联表填充 evaluate_year: int | None = None value_numeric: float | None = None value_text: str | None = None value_date: str | None = None stage: 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 TraitObservationQueryParam(BaseModel): evaluation_id: int | None = Field(default=None, description="所属鉴定", json_schema_extra={"q": "eq"}) tree_id: int | None = Field(default=None, description="单株", json_schema_extra={"q": "eq"}) combination_id: int | None = Field(default=None, description="杂交组合", json_schema_extra={"q": "eq"}) trait_id: int | None = Field(default=None, description="性状", json_schema_extra={"q": "eq"}) evaluate_year: int | None = Field(default=None, description="观测年份", json_schema_extra={"q": "eq"})