2

次のモデルの出力でネストされたオブジェクトにグループcontact_typecontact_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"
  }
}

これを実装する最良の方法は何ですか?

4

2 に答える 2

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}

または、他のスタイルの dict で行うこともできます。

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}

カスタムフィールドを見てみましょう

于 2016-09-29T00:54:27.903 に答える
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()
于 2016-05-28T18:56:16.277 に答える