from app.core.base_schema import CommonSchema """性状字典 —— Pydantic 校验/序列化模型。""" from datetime import datetime from pydantic import BaseModel, ConfigDict, Field class TraitBaseSchema(BaseModel): model_config = ConfigDict(from_attributes=True) trait_code: str = Field(..., description="性状编码") trait_name: str = Field(..., description="性状名称") category: str = Field(default=None, description="性状类别") data_type: str = Field(default=None, description="数据类型") unit: str = Field(default=None, description="单位") is_core: str = Field(default=None, description="是否核心性状") scale_json: str = Field(default=None, description="量规/分级JSON") valid_min: float = Field(default=None, description="有效最小值") valid_max: float = Field(default=None, description="有效最大值") ontology_uri: str = Field(default=None, description="本体IRI") remark: str = Field(default=None, description="备注") class TraitCreateSchema(TraitBaseSchema): pass class TraitUpdateSchema(TraitBaseSchema): trait_code: str | None = Field(default=None, description="性状编码") trait_name: str | None = Field(default=None, description="性状名称") category: str | None = Field(default=None, description="性状类别") data_type: str | None = Field(default=None, description="数据类型") unit: str | None = Field(default=None, description="单位") is_core: str | None = Field(default=None, description="是否核心性状") scale_json: str | None = Field(default=None, description="量规/分级JSON") valid_min: float | None = Field(default=None, description="有效最小值") valid_max: float | None = Field(default=None, description="有效最大值") ontology_uri: str | None = Field(default=None, description="本体IRI") remark: str | None = Field(default=None, description="备注") class TraitOutSchema(TraitBaseSchema): id: int uuid: str trait_code: str | None = None trait_name: str | None = None category: str | None = None data_type: str | None = None unit: str | None = None is_core: str | None = None scale_json: str | None = None valid_min: float | None = None valid_max: float | None = None ontology_uri: 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 TraitQueryParam(BaseModel): trait_code: str | None = Field(default=None, description="性状编码") trait_name: str | None = Field(default=None, description="性状名称") category: str | None = Field(default=None, description="性状类别") data_type: str | None = Field(default=None, description="数据类型") is_core: str | None = Field(default=None, description="是否核心性状") model_config = ConfigDict( extra="ignore", json_schema_extra={ "trait_code": ("like", "{param}"), "trait_name": ("like", "{param}"), "category": ("eq", "{param}"), "data_type": ("eq", "{param}"), "is_core": ("eq", "{param}"), }, )