Python 在棉花糖模式中将对象属性分组到新字典中
我试图用棉花糖序列化一个对象,使相关属性组合到一个原始对象上不存在的字典中。我的代码:Python 在棉花糖模式中将对象属性分组到新字典中,python,marshmallow,Python,Marshmallow,我试图用棉花糖序列化一个对象,使相关属性组合到一个原始对象上不存在的字典中。我的代码: from marshmallow import Schema, fields, pprint import json class StatsSchema(Schema): population = fields.Int() rating = fields.Int() class AnimalSchema(Schema): name = fields.Str() featur
from marshmallow import Schema, fields, pprint
import json
class StatsSchema(Schema):
population = fields.Int()
rating = fields.Int()
class AnimalSchema(Schema):
name = fields.Str()
features = fields.List(fields.Str())
stats = fields.Nested(StatsSchema)
dog = {
'name':'dog',
'features': ['tongue', 'wet nose'],
'population': 200,
'rating': 10
}
animal_schema = AnimalSchema()
data, errors = animal_schema.dump(dog)
print(json.dumps(data, indent=2))
实际结果:
{
"features": [
"tongue",
"wet nose"
],
"name": "dog"
}
预期结果:
{
"features": [
"tongue",
"wet nose"
],
"name": "dog",
"stats": {"population": 500, "rating": 10}
}
我知道输出中缺少stats键,因为它不在原始对象上,但我不确定如何指定Marshmallow应使用该对象将新stats键创建为新字典。我找到了一种创建内部字典的可能方法。不确定这是否是唯一/最好的方法:
class AnimalSchema(Schema):
name = fields.Str()
features = fields.List(fields.Str())
stats = fields.Method('get_stats')
def get_stats(self, post):
data, err = StatsSchema().dump(post)
return data
这将在中讨论
你可以这么做
class AnimalSchema(Schema):
name = fields.Str()
features = fields.List(fields.Str())
stats = fields.Nested(StatsSchema, dump_only=True)
class Animal:
[...]
@property
def stats(self):
return {'population': self.population, 'rating': self.rating}