from iti.applications.extensions import db from iti.applications.common.crud import BaseModelMixin from iti.applications.common.enums import StatusEnum from iti.applications.common.utils import BaseSchema from apiflask.fields import String, DateTime, Enum, Integer, Nested class SysDictType(BaseModelMixin): """ 字典类型表 """ __tablename__ = "sys_dict_type" type_name = db.Column(db.String(255), nullable=False, comment="类型名称") type_code = db.Column( db.String(128), nullable=False, unique=True, comment="类型编码" ) desc = db.Column(db.Text, nullable=True, comment="类型描述") sort = db.Column(db.Integer, nullable=False, default=0, comment="排序") status = db.Column( db.Enum(StatusEnum, values_callable=lambda x: [e.value for e in x]), nullable=False, default=StatusEnum.ENABLED.value, comment="状态", ) # 关系 data_list = db.relationship( "SysDictData", primaryjoin="SysDictType.type_code == SysDictData.type_code", back_populates="type", foreign_keys="SysDictData.type_code", lazy="dynamic", ) class SysDictData(BaseModelMixin): """ 字典数据表 """ __tablename__ = "sys_dict_data" type_code = db.Column(db.String(36), nullable=False, comment="类型编码") label = db.Column(db.String(255), nullable=False, comment="数据标签") code = db.Column(db.String(128), nullable=False, comment="数据编码") value = db.Column(db.Text, nullable=True, comment="数据值") desc = db.Column(db.Text, nullable=True, comment="数据描述") sort = db.Column(db.Integer, nullable=False, default=0, comment="排序") status = db.Column( db.Enum(StatusEnum, values_callable=lambda x: [e.value for e in x]), nullable=False, default=StatusEnum.ENABLED.value, comment="状态", ) # 关系 type = db.relationship( "SysDictType", primaryjoin="SysDictData.type_code == SysDictType.type_code", back_populates="data_list", foreign_keys=type_code, ) class SysDictTypeSchema(BaseSchema): id = String() type_name = String() type_code = String() desc = String() sort = Integer() status = Enum(StatusEnum, by_value=True) created_at = DateTime(format="%Y-%m-%d %H:%M:%S") updated_at = DateTime(format="%Y-%m-%d %H:%M:%S") # 关系 data_list = Nested("SysDictDataSchema", many=True, dump_only=True, exclude=["type"]) class SysDictDataSchema(BaseSchema): id = String() type_code = String() label = String() code = String() value = String() desc = String() sort = Integer() status = Enum(StatusEnum, by_value=True) created_at = DateTime(format="%Y-%m-%d %H:%M:%S") updated_at = DateTime(format="%Y-%m-%d %H:%M:%S") # 关系 type = Nested( "SysDictTypeSchema", dump_only=True, exclude=["data_list"], )