Как сгладить объект ассоциации (дополнительное поле данных) внутри Зефира? - PullRequest
0 голосов
/ 12 февраля 2020

Как я могу получить приведенный ниже '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}},
...