Как я могу получить приведенный ниже 'seat_index' для размещения внутри объекта учащегося - а не снаружи? Я все еще изучаю свой путь вокруг Зефира. Любой толчок / подсказка в правильном направлении очень ценится.
Обновление : я могу сгладить вывод, отредактировав схему объекта ассоциации следующим образом. Кажется, немного не элегантно, хотя: Есть ли лучший способ?
class ClassStuSchema(Schema):
student_id = fields.Function(lambda obj: obj.student.student_id)
student_name = fields.Function(lambda obj: obj.student.student_name)
age = fields.Function(lambda obj: obj.student.age)
gender = fields.Function(lambda obj: obj.student.gender)
rating = fields.Function(lambda obj: obj.student.reviews[0].rating)
comment = fields.Function(lambda obj: obj.student.reviews[0].comment)
teacher_eval = fields.Function(lambda obj: obj.student.reviews[0].teacher_evaluation)
Мои схемы:
class ReviewSchema(ma.Schema):
class Meta:
fields = ('rating', 'comment', 'tags', 'teacher_evaluation')
class StudentSchema(ma.Schema):
# Nest Review items within Student
rating = fields.Function(lambda obj: obj.reviews[0].rating)
comment = fields.Function(lambda obj: obj.reviews[0].comment)
teacher_eval = fields.Function(lambda obj: obj.reviews[0].teacher_evaluation)
class Meta:
fields = ('student_id', 'student_name', 'gender', 'age', 'rating', 'comment',
'teacher_eval')
class ClassStuSchema(Schema):
student = fields.Nested(StudentSchema)
class Meta:
fields = ('seat_index', 'student') # Flatten here
Код зефира / SqlAlchemy:
query = Classroom.query.filter().order_by('start_time').all()
data = ClassroomSchema(many=True).dump(query)
и его (сокращенный) вывод это:
'students': [ { 'seat_index': 1,
'student': { 'age': 4,
'comment': None,
'gender': 'A',
'rating': None,
'student_id': 12234,
'student_name': 'Bill',
'teacher_eval': None}},
Я ищу этот вывод ... где seat_index находится внутри каждого объекта студента:
'student': { 'seat_index': 1,
'age': 4,
'comment': None,
'gender': 'A',
'rating': None,
'student_id': 12234,
'student_name': 'Bill',
'teacher_eval': None}},