【问题标题】:Parse Enum Output with Flask Marshmallow Schema使用 Flask Marshmallow Schema 解析枚举输出
【发布时间】:2020-07-20 10:00:04
【问题描述】:

我有一个关于烧瓶棉花糖架构的问题。所以,我像下面的例子一样创建模型。

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"}

我转储之后?谢谢之前

【问题讨论】:

    标签: python schema dump flask-marshmallow marshmallow-sqlalchemy


    【解决方案1】:

    我终于找到了答案。

    1. 创建将字段枚举序列化为字典的类

      类 EnumToDictionary(fields.Field):

    def _serialize(self, value, attr, obj, **kwargs):
        if value is None:
            return None
        return {"name": value.name, "value": value.value}
    
    1. 使用类
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 2014-09-24
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多