You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iTi-Flask/iti/applications/models/sys/sys_dict.py

95 lines
2.9 KiB
Python

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"],
)