【发布时间】:2020-04-03 21:23:57
【问题描述】:
我正在使用 Flask-Marshmallow 和 Flask-SQLAlchemy 将数据转储到 API。
我在 API 中有一个选项可以转储响应中的特定字段:
schema = UserSchema()
schema.dump(data, only=fields)
如果使用 data_key 功能提取其中一个字段名称,我会得到一个错误:
ValueError: Invalid fields for <UserSchema()>: {'account_name'}.
澄清:要正确过滤此字段,客户端必须通过 accountname 以返回 account_name。这是不可取的,因为客户端没有暴露于内部实现。
示例代码:
class User(db.Model):
__tablename__ = 'users'
user_id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String)
account = db.relationship('Account', backref='user')
class Account(db.Model):
__tablename__ = 'accounts'
account_id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer)
accountname = db.Column(db.String)
class UserSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = User
include_fk = True
sqla_session = db.session
account = ma.Pluck('AccountSchema', 'accountname', data_key='account_name')
class AccountSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = Account
include_fk = True
sqla_session = db.session
有没有什么技巧可以根据 data_key 让 Marshmallow 转储?
更新:我目前正在通过使用映射器装饰控制器功能以蛮力方法解决此问题。不过,要是棉花糖能搞定就好了?
【问题讨论】:
标签: marshmallow