model.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from sqlalchemy import Boolean, ForeignKey, Integer, String
  2. from sqlalchemy.orm import Mapped, mapped_column, relationship
  3. from app.core.base_model import ModelMixin
  4. class DictTypeModel(ModelMixin):
  5. """
  6. 字典类型表
  7. """
  8. __tablename__: str = "sys_dict_type"
  9. __table_args__: dict[str, str] = {"comment": "字典类型表"}
  10. __loader_options__: list[str] = []
  11. dict_name: Mapped[str] = mapped_column(String(64), nullable=False, comment="字典名称")
  12. dict_type: Mapped[str] = mapped_column(
  13. String(255), nullable=False, unique=True, comment="字典类型"
  14. )
  15. # 关系定义
  16. dict_data_list: Mapped[list["DictDataModel"]] = relationship(
  17. "DictDataModel",
  18. back_populates="dict_type_obj",
  19. cascade="all, delete-orphan",
  20. )
  21. class DictDataModel(ModelMixin):
  22. """
  23. 字典数据表
  24. """
  25. __tablename__: str = "sys_dict_data"
  26. __table_args__: dict[str, str] = {"comment": "字典数据表"}
  27. __loader_options__: list[str] = []
  28. dict_sort: Mapped[int] = mapped_column(Integer, nullable=False, default=0, comment="字典排序")
  29. dict_label: Mapped[str] = mapped_column(String(255), nullable=False, comment="字典标签")
  30. dict_value: Mapped[str] = mapped_column(String(255), nullable=False, comment="字典键值")
  31. css_class: Mapped[str | None] = mapped_column(
  32. String(255), nullable=True, comment="样式属性(其他样式扩展)"
  33. )
  34. list_class: Mapped[str | None] = mapped_column(
  35. String(255), nullable=True, comment="表格回显样式"
  36. )
  37. is_default: Mapped[bool] = mapped_column(
  38. Boolean,
  39. nullable=False,
  40. default=False,
  41. comment="是否默认(True是 False否)",
  42. )
  43. dict_type: Mapped[str] = mapped_column(String(255), nullable=False, comment="字典类型")
  44. # 添加外键关系,同时保留dict_type字段用于业务查询
  45. dict_type_id: Mapped[int] = mapped_column(
  46. Integer,
  47. ForeignKey("sys_dict_type.id", ondelete="CASCADE"),
  48. nullable=False,
  49. comment="字典类型ID",
  50. )
  51. # 关系定义
  52. dict_type_obj: Mapped[DictTypeModel] = relationship(
  53. "DictTypeModel", back_populates="dict_data_list"
  54. )