Wie man bei der Serialisierung von Objekten mit Marshmallow einige Elternobjektfelder verschachtelt

Ich bin mit Marshmallow zu serialisieren ein sqlalchemy Objekt, das eine flache Struktur wie hat:

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) 

Beim serialisieren möchte ich marshmallow die entsprechenden adressenfelder wie folgt gruppieren:

 {'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'}} 

Gibt es einen Weg, um Marshmallow zu bekommen, dies zu tun, ohne @post_dump? Ich weiß, dass ich andere Schemata mit Nested () verschachteln kann, aber in diesem Fall möchte ich nur gewisse Spalten aus dem übergeordneten Schema selbst verschachteln.

One Solution collect form web for “Wie man bei der Serialisierung von Objekten mit Marshmallow einige Elternobjektfelder verschachtelt”

Vielleicht … In deiner Schema-Klasse füge ein Feld hinzu.

 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}} 

Werfen Sie einen Blick auf Marshmallow Dokumentation

Python ist die beste Programmiersprache der Welt.