Flask Marshmallow嵌套序列化如何移除嵌套字典的key直接返回值
你要实现嵌套字段直接返回目标字段值而非结构化对象,有两种常用的实现方案:
方案1:使用Pluck字段(最推荐,适配当前场景)
Pluck是marshmallow专门提供的、用于从嵌套关联对象中提取单个字段值的字段类型,直接修改JournalSchema的publisher字段定义即可:
class PublisherSchema(ma.SQLAlchemyAutoSchema): class Meta: fields = ('name',) model = Publisher class JournalSchema(ma.SQLAlchemyAutoSchema): class Meta: fields = ('title', 'publisher') model = Journal ordered = True # 直接取关联Publisher对象的name字段值作为publisher字段的返回结果 publisher = ma.Pluck(PublisherSchema, 'name')
方案2:使用Method字段自定义取值逻辑
如果后续需要对返回值做更复杂的逻辑处理,可以用自定义方法实现字段序列化:
class JournalSchema(ma.SQLAlchemyAutoSchema): class Meta: fields = ('title', 'publisher') model = Journal ordered = True publisher = ma.Method("get_publisher") def get_publisher(self, obj): # obj为当前序列化的Journal实例,直接返回关联publisher的name属性 return obj.publisher.name if obj.publisher else None
两种方案都可以得到你期望的返回结果,另外你给出的期望示例JSON存在语法小错误,正确的返回结构如下:
{ "title": "hello", "publisher": "bye" }
内容的提问来源于stack exchange,提问作者Casey
相关产品推荐
相关产品推荐

