У объекта 'CourseTake' нет атрибута 'points'

class SimpleCourseSerializer(serializers.ModelSerializer):
class Meta:
    model = Course
    fields = ['title','credit_hours']


class CourseTakeSerializer(serializers.ModelSerializer):
course = SimpleCourseSerializer()
points = serializers.SerializerMethodField()
grade_points = serializers.SerializerMethodField()

class Meta:
    model = CourseTake
    fields = ['id','course', 'grade', 'points', 'grade_points']

def get_points(self, coursetake: CourseTake):
    if coursetake.grade >= 90:
        return '4'
    elif coursetake.grade >= 70:
        return '3'
    elif coursetake.grade >= 50:
        return '2'
    return '1'

#TRY AND ERROR  
#Terminal: 'CourseTake' object has no attribute 'points'
def get_grade_points(self, coursetake: CourseTake):
    return coursetake.course.credit_hours * coursetake.points 

Я хочу вычислить баллы, которые позже будут использоваться для вычисления оценки GPA каждого студента. Поэтому get_grade_point() будет возвращать кредитные_часы * баллы. Моя проблема в том, что поле points не является частью модели или сериализатора. Я создал функцию для вычисления баллов для каждого курса. Поскольку я определил баллы, Django продолжает говорить, что это не атрибут, когда я пытаюсь получить доступ к значениям баллов. Есть ли способ получить доступ к значению баллов внутри функции get_grade_function?

Изображение для лучшего просмотра

Вы должны использовать его таким образом

points = serializers.SerializerMethodField('get_points')

Или используйте @property внутри вашей модели и используйте его:

serializers.Field(source='points')

points - это имя функции внутри вашей модели как свойство

Вернуться на верх