该架构为您提供了与您的规范非常相似的内容:
from marshmallow import Schema, fields
class InterestSchema(Schema):
class Meta:
fields = ('id', 'name')
ordered = True
class OwnerInterestSchema(Schema):
interest = fields.Nested(InterestSchema)
class Meta:
fields = ('id', 'interest', 'active')
ordered = True
class OwnerSchema(Schema):
interests = fields.Nested(OwnerInterestSchema, many=True)
class Meta:
fields = ('id', 'name', 'mobile', 'interests')
ordered = True
然后,您可以像这样序列化数据(请注意,我的模型的名称与您的模型的名称不完全相同):
>>> from app.serialisation import OwnerSchema
>>> from app.models import Owner
>>> data = OwnerSchema().dump(Owner.query.get(1))
>>> from marshmallow import pprint
>>> pprint(data)
{"id": 1, "name": "John", "mobile": "07123456789", "interests": [{"interest": {"id": 1, "name": "Economics"}, "active": true}, {"interest": {"id": 2, "name": "Poetry"}, "active": true}, {"interest": {"id": 3, "name": "Sport"}, "active": false}]}
让我缩进该输出,以便您可以看到发生了什么:
{
"id": 1,
"name": "John",
"mobile": "07123456789",
"interests": [
{
"interest": {
"id": 1,
"name": "Economics"
},
"active": true
},
{
"interest": {
"id": 2,
"name": "Poetry"
},
"active": true
},
{
"interest": {
"id": 3,
"name": "Sport"
},
"active": false
}
]
}
如果需要,您可以对其进行调整以使用模型加排除范例。如果你真的想要那个"_embedded"
JSON 中的字段,您可能需要一个自定义字段,如下所述here.
您还可以使用自定义字段来展平您的兴趣并将"active"
场与"id"
and "name"
,但我认为这会产生误导。