Сортировать объекты Django по значению метода класса модели
У студентов есть оценки. Среднюю оценку вычисляет метод avg_mark(). Хочу с помощью метакласса сортировать студентов по убыванию ср.оценки. Проблема в том, что это не поле класса, и Django не хочет. Help, please!
ERRORS:
app.Student: (models.E015) 'ordering' refers to the nonexistent field, related field, or lookup 'avg_mark'.
from django.db import models
class Group(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return 'группа ' + self.name
class Student(models.Model):
name = models.CharField(max_length=100)
group = models.ForeignKey(Group, null=True, blank=True, on_delete=models.SET_NULL)
def __str__(self):
return f'{self.name} > {self.group}'
def avg_mark(self):
marks = [mark.value for mark in Mark.objects.filter(student = self.id)]
return round(sum(marks) / len(marks), 1)
class Meta:
ordering = ['avg_mark']
class Subject(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Mark(models.Model):
value = models.IntegerField(default=60)
student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name='marks')
subject = models.ForeignKey(Subject, on_delete=models.CASCADE, related_name='marks')
def __str__(self):
return f'оценка > {self.student} > {self.subject} > {self.value}'