python - 使用 Flask Marshmallow Schema 解析枚举输出
问题描述
我有一个关于烧瓶棉花糖模式的问题。所以,我像下面的例子一样创建模型。
class ID(db.Model):
__abstract__ = True
id = db.Column(db.Integer, autoincrement=True, primary_key=True)
class Timestamp(db.Model):
__abstract__ = True
created = db.Column(db.DateTime, default=db.func.now(), nullable=False)
updated = db.Column(
class Checklist(ID, Timestamp):
__tablename__ = "checklist"
partner_id = db.Column(db.Integer(), db.ForeignKey("partner.id"), nullable=False)
statement_status = db.Column(
db.Enum(StatementStatus), nullable=False, default=StatementStatus.NOT_SELECTED
)
statement_accuracy = db.Column(
db.Enum(StatementAccuracy),
nullable=False,
default=StatementAccuracy.NOT_SELECTED,
)
update_status = db.Column(
db.Enum(UpdateStatus), nullable=False, default=UpdateStatus.NOT_SELECTED
)
annual_text_return = db.Column(
db.Enum(AnnualReturnStatus),
nullable=False,
default=AnnualReturnStatus.NOT_SELECTED,
)
然后我有这样的架构:
from flask_marshmallow.sqla import SQLAlchemyAutoSchema
class ChecklistSchema(SQLAlchemyAutoSchema):
class Meta:
model = Checklist
include_fk = True
是否有可能像输出枚举一样
statement_status: {"value": NOT_SELECTED, "name": "Not Selected"}
在我倾倒之后?谢谢之前
解决方案
最后我找到了答案。
创建将字段枚举序列化为dict的类
类 EnumToDictionary(fields.Field):
def _serialize(self, value, attr, obj, **kwargs): if value is None: return None return {"name": value.name, "value": value.value}
- 使用类
class ChecklistSchema(SQLAlchemyAutoSchema): statement_status = EnumToDictionary(attribute=("statement_status")) statement_accuracy = EnumToDictionary(attribute="statement_accuracy") update_status = EnumToDictionary(attribute="update_status") annual_text_return = EnumToDictionary(attribute="annual_text_return") class Meta: model = Checklist include_fk = True
推荐阅读
- python - python numpy数组搜索
- ruby-on-rails - 检索 Rails 模型时是否包含第三方数据?
- arrays - 不断弹出索引超出范围错误
- javascript - 如何反转我的 javascript 图像轮播的方向?
- python - python 中的 json.dump() 是否重写或附加 JSON 文件
- java - 如何将 Java jsp 数组设置为我的 Index.html 表
- c++ - Qt:.pro 文件丢失?
- java - 无法使用 System.currentTimeMillis() 在 Android 中计算时间差
- python - ValueError:无法将大小为 1 的数组重塑为形状 (1,4)
- python-3.x - Pytesseract 始终错误地读取特定数字