如何在不属于我的 SQLAlchemy 模型的 Flask-Marshmallow 中添加自定义字段

How to add a custom field in Flask-Marshmallow which is not a part of my SQLAlchemy Model

假设我的模型 class 如下。

class BankAccount(db.Model):
    a = db.Column(db.Integer, primary_key=True)
    b = db.Column(db.String(80))

我的架构如下所示。

class CreateAccountSchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = BankAccount
        load_instance = True
        ordered = True

但在这里我想定义一个字段 c,它在我的模型 class 中不存在,因为它应该只用于转储(ing)值而不是存储在数据库中。 像...

class CreateAccountSchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = BankAccount
        dump_only = ('c',)
        load_instance = True
        ordered = True
        c = #somedefination

你可以这样做:

class CreateAccountSchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = BankAccount
        load_instance = True
        ordered = True
        c = fields.Method("get_data")

    def get_data(self, obj):
        if hasattr(obj, "data"):
            return obj.data
        return None

这将转储附加字段。 你可以这样使用它:

bank_account = db.session.query(BankAccount).first()
bank_account.data = "whatever"
schema = CreateAccountSchema()
schema.dump(bank_account)

更多信息here