【问题标题】:How to nest some parent object fields when serializing objects using marshmallow使用棉花糖序列化对象时如何嵌套一些父对象字段
【发布时间】:2016-06-23 05:55:02
【问题描述】:

我正在使用 marshmallow 序列化一个具有如下平面结构的 sqlalchemy 对象:

class Company(Base):
   __tablename__ = 'Company'
   id = sa.Column(sa.Integer, primary_key=True)
   MainStreetAddress = sa.Column(sa.String)
   MainCity = sa.Column(sa.String)
   MainState = sa.Column(sa.String)
   MainZip = sa.Column(sa.String)
   AltStreetAddress = sa.Column(sa.String)    
   AltCity = sa.Column(sa.String)
   AltState = sa.Column(sa.String)
   AltZip2 = sa.Column(sa.String)

序列化时,我希望marshmallow将相关的地址字段分组如下:

{'id':1,
 'main_address':{'street_address':'101 main    st','city':'springfield','state':'IL','zip':'11231'},
 'alt_address':{'street_address':'102 main st','city':'new bedford','state':'MA','zip':'07630'}}

有没有办法让棉花糖在不使用@post_dump 的情况下做到这一点?我知道我可以使用 Nested() 嵌套其他模式,但在这种情况下,我只想嵌套父模式本身的某些列。

【问题讨论】:

    标签: python sqlalchemy marshmallow


    【解决方案1】:

    也许...在您的 Schema 类中添加一个字段。方法:

    class Company(Base):
        __tablename__ = 'Company'
        id = sa.Column(sa.Integer, primary_key=True)
        MainStreetAddress = sa.Column(sa.String)
        MainCity = sa.Column(sa.String)
        MainState = sa.Column(sa.String)
        MainZip = sa.Column(sa.String)
        AltStreetAddress = sa.Column(sa.String)    
        AltCity = sa.Column(sa.String)
        AltState = sa.Column(sa.String)
        AltZip2 = sa.Column(sa.String)
    
    class CompanySchema(Schema):
        id = fields.Integer()
        main_address = fields.Method('make_main_address')
        alt_address = fields.Method('make_alt_address')
    
        def make_main_address(self, obj)
            return {'main_address':{'street_address':obj.MainStreetAddress,'city':obj.MainCity ,'state':obj.MainState,'zip':obj.MainZip}}
    
        def make_alt_address(self, obj)
            return {'alt_address':{'street_address':obj.AltStreetAddress,'city':obj.AltCity ,'state':obj.AltState,'zip':obj.AltZip2}}
    

    看看Marshmallow Documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 2020-10-31
      • 2021-02-12
      • 1970-01-01
      • 2019-08-03
      • 2021-12-14
      相关资源
      最近更新 更多