python - 使用 Marshmallow 序列化对象时如何嵌套一些父对象字段

标签 python sqlalchemy marshmallow

我正在使用 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() 嵌套其他模式,但在这种情况下,我只想从父模式本身嵌套某些列。

最佳答案

也许...在您的 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

关于python - 使用 Marshmallow 序列化对象时如何嵌套一些父对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35881744/

相关文章:

python - 运行代码时,我得到 "init done opengl support available"作为输出消息,但我没有得到输出图像

python - 使用 PyObjC 以正常方式打印 python 异常

python - 随机化图像中黑色像素的位置

python - 如何在 flask-SQLAlchemy 中使用 Default 和 Onupdate 等值

sql - Postgresql 使用 like 选择数组重叠的位置

python - 如何在Python中比较sql和json

marshmallow - 如何将 Schema.from_dict() 用于嵌套字典?

python - 嵌套字典值类型的验证

python - 在 32 位库中使用 python ctypes

python - SQLAlchemy: AttributeError: 'unicode' 对象没有属性 '_sa_instance_state'