Python 如何在棉花糖(+;sqlalchemy)中将嵌套对象与父对象合并?
从他们的例子 如何获得合并结果而不是嵌套结果? 预期结果:Python 如何在棉花糖(+;sqlalchemy)中将嵌套对象与父对象合并?,python,marshalling,Python,Marshalling,从他们的例子 如何获得合并结果而不是嵌套结果? 预期结果: user = User(name="Monty", email="monty@python.org") blog = Blog(title="Something Completely Different", author=user) serialized = BlogSerializer(blog) serialized.data # {'created_at': 'Sun, 10 Nov 2013 16:10:57 -0000', #
user = User(name="Monty", email="monty@python.org")
blog = Blog(title="Something Completely Different", author=user)
serialized = BlogSerializer(blog)
serialized.data
# {'created_at': 'Sun, 10 Nov 2013 16:10:57 -0000',
# 'email': u'monty@python.org',
# 'name': u'Monty',
# 'title': u'Something Completely Different'}
您必须分别序列化嵌套对象的每个属性。如果您想走这条路,最简单的方法是为每个要“合并”到主序列化程序中的字段定义一个方法字段。尽管如此,只要对自定义字段进行足够的黑客攻击,就可以为您管理这些内容
但是,这与marshmallow的强大功能相矛盾,它允许您轻松快速地组合复杂的模式。我决定使用数据处理程序,而不是改变marshmallow序列化对象的方式。
这可能看起来像一个黑客(tbh,它是),但我真的需要数据扁平化 这个解决方案的优点是,一旦我不需要它,就可以很容易地删除黑客
@BlogSerializer.data_handler
def flatten(serializer, data, obj):
if 'author' in data:
author = data['author']
del data['author']
return dict(author, **data)
else:
return data
您可以轻松地使此方法更通用,并将属性列表展平。我现在不需要那种抽象层次
谢谢@justanr的提示。谢谢,我为我正在使用的atm解决方案添加了代码;)