Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在棉花糖(+;sqlalchemy)中将嵌套对象与父对象合并?_Python_Marshalling - Fatal编程技术网

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解决方案添加了代码;)