Files
dpb/backend/app/api/v1/module_bre/cross_combination/model.py
T
34047007@qq.com b95053c52c init: 初始化 dpb 桃育种系统代码库
前后端 + 后端 FastAPI 全量源码、部署脚本与文档。
2026-08-06 00:17:49 +08:00

68 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""杂交组合 数据模型"""
from datetime import datetime
from sqlalchemy import Float, ForeignKey, Index, Integer, String, Text, text
from sqlalchemy.orm import Mapped, mapped_column
from app.core.base_model import MappedBase, ModelMixin, UserMixin
class CrossCombinationModel(ModelMixin, UserMixin, MappedBase):
"""杂交组合 主数据表。"""
__tablename__ = "bre_cross_combination"
combination_code: Mapped[str] = mapped_column(String(100), nullable=False, comment="组合编号")
cross_year: Mapped[int | None] = mapped_column(Integer, nullable=True, comment="杂交年份", default=None)
bre_target_id: Mapped[int] = mapped_column(
Integer, ForeignKey("bre_target.id", ondelete="CASCADE"),
index=True, nullable=False, comment="育种目标"
)
female_parent_id: Mapped[int] = mapped_column(
Integer, ForeignKey("bre_germplasm.id", ondelete="CASCADE"),
index=True, nullable=True, comment="母本"
)
male_parent_id: Mapped[int] = mapped_column(
Integer, ForeignKey("bre_germplasm.id", ondelete="CASCADE"),
index=True, nullable=True, comment="父本"
)
cross_method: Mapped[str | None] = mapped_column(String(50), nullable=True, comment="杂交方式", default=None)
cross_type: Mapped[str | None] = mapped_column(String(16), nullable=True, comment="杂交类型(杂交/自交/开放)", default=None)
design_type: Mapped[str] = mapped_column(
String(32), nullable=False, default="full_diallel",
comment="交配设计(full_diallel完全双列/partial_diallel部分双列/line_tester line×tester NCII/nciii NCIII测交)",
)
parent_combination_id: Mapped[int | None] = mapped_column(
Integer, ForeignKey("bre_cross_combination.id", ondelete="SET NULL"),
index=True, nullable=True, comment="母本组合(自关联)"
)
reason: Mapped[str | None] = mapped_column(String(512), nullable=True, comment="组配理由", default=None)
stage: Mapped[str | None] = mapped_column(String(32), nullable=True, comment="育种阶段(breeding_stage)", default=None)
cross_date: Mapped[str | None] = mapped_column(String(20), nullable=True, comment="杂交日期", default=None)
seed_count: Mapped[int | None] = mapped_column(Integer, nullable=True, comment="获种数", default=None)
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_cross_combination_created_deleted", "created_time", "is_deleted"),
# 组合编号唯一(仅约束未软删记录,与 service 层查重语义一致)
Index(
"uniq_bre_cross_combination_code", "combination_code",
unique=True, postgresql_where=text("is_deleted = false"),
),
)