58 lines
2.6 KiB
Python
58 lines
2.6 KiB
Python
"""性状字典 数据模型"""
|
|||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
from sqlalchemy import Float, ForeignKey, Index, Integer, String, Text
|
||
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
||
|
|
|
||
|
|
from app.core.base_model import MappedBase, ModelMixin, UserMixin
|
||
|
|
|
||
|
|
|
||
|
|
class TraitModel(ModelMixin, UserMixin, MappedBase):
|
||
|
|
"""性状字典 主数据表。"""
|
||
|
|
|
||
|
|
__tablename__ = "bre_trait"
|
||
|
|
|
||
|
|
trait_code: Mapped[str] = mapped_column(
|
||
|
|
String(64), nullable=False, unique=True, comment="性状编码"
|
||
|
|
)
|
||
|
|
|
||
|
|
trait_name: Mapped[str] = mapped_column(String(128), nullable=False, comment="性状名称")
|
||
|
|
|
||
|
|
category: Mapped[str | None] = mapped_column(String(32), nullable=True, comment="性状类别", default=None)
|
||
|
|
|
||
|
|
data_type: Mapped[str] = mapped_column(String(16), nullable=False, default="numeric", comment="数据类型")
|
||
|
|
|
||
|
|
unit: Mapped[str | None] = mapped_column(String(16), nullable=True, comment="单位", default=None)
|
||
|
|
|
||
|
|
is_core: Mapped[str] = mapped_column(String(1), nullable=False, default="1", comment="是否核心性状")
|
||
|
|
|
||
|
|
scale_json: Mapped[str | None] = mapped_column(Text, nullable=True, comment="量规/分级JSON", default=None)
|
||
|
|
|
||
|
|
valid_min: Mapped[float | None] = mapped_column(Float, nullable=True, comment="有效最小值", default=None)
|
||
|
|
|
||
|
|
valid_max: Mapped[float | None] = mapped_column(Float, nullable=True, comment="有效最大值", default=None)
|
||
|
|
|
||
|
|
ontology_uri: Mapped[str | None] = mapped_column(String(255), nullable=True, comment="本体IRI", default=None)
|
||
|
|
|
||
|
|
stage: Mapped[str] = mapped_column(String(16), nullable=False, default="evaluation", comment="测定阶段(juvenile幼龄/evaluation成株)")
|
||
|
|
method: Mapped[str | None] = mapped_column(String(256), nullable=True, comment="测定方法", default=None)
|
||
|
|
method_uri: Mapped[str | None] = mapped_column(String(256), nullable=True, comment="测定方法URI", default=None)
|
||
|
|
|
||
|
|
direction: Mapped[str] = mapped_column(
|
||
|
|
String(16), nullable=False, default="desc", comment="性状方向(desc越大越好/asc越小越好)"
|
||
|
|
)
|
||
|
|
into_ebv: Mapped[str] = mapped_column(
|
||
|
|
String(1), nullable=False, default="1", comment="是否选种目标(1是/0否)"
|
||
|
|
)
|
||
|
|
default_h2: Mapped[float | None] = mapped_column(
|
||
|
|
Float, nullable=True, default=None, comment="先验遗传力h²(实测缺失时兜底)"
|
||
|
|
)
|
||
|
|
|
||
|
|
remark: Mapped[str | None] = mapped_column(Text, nullable=True, comment="备注", default=None)
|
||
|
|
|
||
|
|
# 无 status 列:覆盖基类默认 ix_<表>_status_deleted 索引,
|
||
|
|
# 仅保留 (created_time, is_deleted) 复合索引用于数据权限过滤。
|
||
|
|
__table_args__ = (
|
||
|
|
Index("ix_bre_trait_created_deleted", "created_time", "is_deleted"),
|
||
|
|
)
|