У объекта '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 - это имя функции внутри вашей модели как свойство