Эта схема дает вам нечто, очень похожее на вашу спецификацию:
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, вам, вероятно, понадобится настраиваемое поле, как описано здесь .
Вы также можете использовать настраиваемые поля, чтобы сгладить ваши интересы и поместить"active"
поле на том же уровне, что и "id"
и "name"
, но я думаю, что это вводит в заблуждение.