我想将contact_type
和contact_value
分组到以下模型的输出中的contact
嵌套对象中:
class Account(Base):
__tablename__ = 'accounts'
id = sa.Column(sa.Integer, primary_key=True)
contact_type = sa.Column(sa.String)
contact_value = sa.Column(sa.String)
预期结果如下:
{
"id": 1,
"contact": {
"type": "phone",
"value": "1234567"
}
}
实施此方法的最佳方法是什么?
答案 0 :(得分:1)
ma = Marshmallow()
class AccountContactSchema(ma.Schema):
type = ma.Str()
value = ma.Str()
class AccountSchema(ma.Schema):
id = ma.Int()
contact = ma.Nested(AccountContactSchema)
account_schema = AccountSchema()
答案 1 :(得分:1)
我不知道这是不是最好的方法,但你可以这样做:
from marshmallow import fields
class AccountSchema(ma.Schema):
id = ma.Int()
contact = fields.Function(lambda x : {'type': x.contact_type, 'value': x.contact_value})
并使用:
>>> acc = Account(id=1, contact_type="phone", contact_value="1234567")
>>> acc_dict, errors = AccountSchema().dump(acc)
>>> print acc_dict
{u'contact': {'type': 'phone', 'value': '1234567'}, u'id': 1}
或者您可以使用其他风格的词典:
class AccountSchema(ma.Schema):
id = ma.Int()
contact = fields.Function(lambda x : {x.contact_type : x.contact_value})
这将导致:
{u'contact': {'phone': '1234567'}, u'id': 1}