Мне удается создать что-то похожее на то, что я хочу, делая некоторые изменения в модели (я добавил в модель обратную ссылку и отношение от проблемы к тесту).Итак, вот мои Схемы сейчас
class UserSchema(ma.ModelSchema):
class Meta:
model = User
class TestSchema(ma.ModelSchema):
class Meta:
model = Test
class AreaSchema(ma.ModelSchema):
class Meta:
model = Area
class IssueSchema(ma.ModelSchema):
class Meta:
model = Issue
class Test_DetailedSchema(ma.ModelSchema):
test = ma.Nested('self')
areas = ma.Nested('AreaSchema', many=True, exclude=('test', 'user',))
issues = ma.Nested('IssueSchema', many=True,
include=('name', 'id', 'reference_number', 'status',))
Итак, теперь в моих взглядах я делаю
from models.model import TestSchema
from models.model import IssueSchema
from models.model import AreaSchema
from models.model import Test_DetailedSchema
# Schemas
test_detailed_schema = Test_DetailedSchema()
test_schema = TestSchema(exclude=('user',))
areas_schema = AreaSchema(many=True, exclude=('test', 'user',))
issues_schema = IssueSchema(many=True)
И в маршруте я делаю что-то вроде этого:
class Test(Resource):
""" GET DELETE AND PUT(modifies) a Test /api/test/<int:test_id>"""
@token_required
def get(self, test_id, *args, **kwargs):
test_result = modelTest.getTest(test_id)
test_details, error = test_detailed_schema.dump(test_result)
pprint.pprint({'test_details': test_details})
Это вывод, который я получил:
{'test': {'areas': [
{'id': 10, 'issues': [7, 8], 'name': 'Name1'},
{'id': 11, 'issues': [9], 'name': 'NameX'},
{'id': 12, 'issues': [], 'name': 'Name2'},
{'id': 13,'issues': [],'name': 'Name3'},
{'id': 14, 'issues': [], 'name': 'Name4'},
{'id': 15,'issues': [],'name': 'Name5'},
{'id': 16, 'issues': [], 'name': 'Name6'},
{'id': 17, 'issues': [], 'name': 'Name7'},
{'id': 18,'issues': [10, 11],'name': 'Name8'}],
'issues': [{
'area': 10,
'id': 7,
'name': 'This is the issueX',
'open_date': None,
'reference_number': '701',
'status': 'N',
'test': 2,
'user': 1},
{'area': 10,
'id': 8,
'name': 'This is the issueY',
'open_date': None,
'reference_number': '702',
'status': 'N',
'test': 2,
'user': 1},
{'area': 11,
'id': 9,
'name': 'This is the issueZ',
'open_date': None,
'reference_number': '703',
'status': 'N',
'test': 2,
'user': 1},
{'area': 18,
'id': 10,
'name': 'This is the issueZZ',
'open_date': None,
'reference_number': '786',
'status': 'N',
'test': 2,
'user': 1},
{'area': 18,
'id': 11,
'name': 'This is the issueXXC',
'open_date': None,
'reference_number': '787',
'status': 'N',
'test': 2,
'user': 1}]}}
Итак, что я должен сделать, чтобы расширить Проблемы внутри областей и избежать:
'id': 10, 'issues': [7, 8], 'name': 'Name1'}
и вместо этого иметь
{'test': {'areas': [
{ 'id': 10,
'name': 'Name1'
'issues':[
{'area': 10,
'id': 7,
'name': 'This is the issueX',
'open_date': None,
'reference_number': '701',
'status': 'N',
'test': 2,
'user': 1},
{'area': 10,
'id': 8,
'name': 'This is the issueY',
'open_date': None,
'reference_number': '702',
'status': 'N',
'test': 2,
'user': 1}
]
Почему проблемы не расширяются внутри областей?