53 lines
2.9 KiB
Python
53 lines
2.9 KiB
Python
from app.core.base_schema import CommonSchema
|
||
"""花粉档案 —— Pydantic 校验/序列化模型。"""
|
||
from datetime import date, datetime
|
||
|
||
from pydantic import BaseModel, ConfigDict, Field
|
||
|
||
|
||
class PollenBaseSchema(BaseModel):
|
||
model_config = ConfigDict(from_attributes=True)
|
||
|
||
lot_code: str = Field(..., description="花粉批次号(如 PL-2026-0001)")
|
||
male_tree_id: int | None = Field(default=None, description="采集父本树(混合/外地采集可空)")
|
||
source_type: str = Field(default="tree", description="来源类型 tree/mixed/external")
|
||
source_desc: str | None = Field(default=None, description="来源说明(混合配比/外地品种)")
|
||
collect_date: date | None = Field(default=None, description="花粉采集日期")
|
||
collect_method: str | None = Field(default=None, description="采集方式(采花取粉/振动收集…)")
|
||
quantity: str | None = Field(default=None, description="采集量(如 50g / 花药数)")
|
||
storage_method: str = Field(default="fridge", description="贮藏方式 fridge/minus20/minus80/liquid_n2")
|
||
viability_method: str | None = Field(default=None, description="活力测定方法 ttc/germination")
|
||
viability_pct: float | None = Field(default=None, description="花粉活力 %")
|
||
viability_test_date: date | None = Field(default=None, description="活力测定日期")
|
||
expiry_date: date | None = Field(default=None, description="有效期/失效日期(授粉窗口上界)")
|
||
remark: str | None = Field(default=None, description="备注")
|
||
|
||
|
||
class PollenCreateSchema(PollenBaseSchema):
|
||
pass
|
||
|
||
|
||
class PollenUpdateSchema(PollenBaseSchema):
|
||
lot_code: str | None = Field(default=None, description="花粉批次号")
|
||
male_tree_id: int | None = Field(default=None, description="采集父本树")
|
||
source_type: str | None = Field(default=None, description="来源类型 tree/mixed/external")
|
||
storage_method: str | None = Field(default=None, description="贮藏方式 fridge/minus20/minus80/liquid_n2")
|
||
|
||
|
||
class PollenOutSchema(PollenBaseSchema):
|
||
id: int
|
||
uuid: str
|
||
male_tree_no: str | None = None # 由 Service 层联表填充
|
||
created_time: datetime | None = None
|
||
updated_time: datetime | None = None
|
||
created_by: CommonSchema | None = None
|
||
updated_by: CommonSchema | None = None
|
||
|
||
|
||
class PollenQueryParam(BaseModel):
|
||
lot_code: str | None = Field(default=None, description="花粉批次号", json_schema_extra={"q": "like"})
|
||
male_tree_id: int | None = Field(default=None, description="采集父本树", json_schema_extra={"q": "eq"})
|
||
source_type: str | None = Field(default=None, description="来源类型", json_schema_extra={"q": "eq"})
|
||
storage_method: str | None = Field(default=None, description="贮藏方式", json_schema_extra={"q": "eq"})
|
||
viability_method: str | None = Field(default=None, description="活力测定方法", json_schema_extra={"q": "eq"})
|