models.py
class Course(models.Model):
title = models.CharField(max_length=255)
credit_hours = models.IntegerField()
instructor = models.ForeignKey(Instructor, on_delete=models.SET_NULL, null=True, related_name='course')
def __str__(self) -> str:
return self.title
class CourseTake(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name='coursetake') #similar to reviews in the product class
course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='course')
grade = models.PositiveIntegerField()
class Meta:
unique_together = [['student', 'course']]类SimpleCourseSerializer(serializers.ModelSerializer):类元:模型=课程字段=“标题”,“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()将返回credit_hours *重合点。我的问题是,points字段不是模型或序列化程序的一部分。我创建了一个函数来计算每门课程的分数。因为我定义了点,Django一直说它不是一个属性,每当我试图访问点值时。是否有一种方法来访问get_grade_function中的点值?
发布于 2022-10-17 04:39:55
取决于您想要什么,我建议在模型上使用Save方法
def save(self, *args, **kwargs):如果您想将结果保存在数据库中,或者如果不想保存,也可以使用@proparty在模型类中创建只读方法。
之后,您可以很容易地在序列化程序中使用它。
https://stackoverflow.com/questions/74091953
复制相似问题