2017-08-07 10 views
0

Django ORMを使用して各学生の平均スコアを計算しようとしています。ここで は私のモデルです: 合計(スコア* course_units)/ SUM(course_units)Django - 複数のJOINを使用して平均スコアを計算する

私は平均的な対生徒のIDを取得する必要があります。各学生のため

class Student(models.Model): 
    name = models.CharField(max_length=2000) 
    birth_date = models.DateField() 


class Course(models.Model): 
    name = models.CharField(max_length=250) 
    units = models.IntegerField() 


class StudentScore(models.Model): 
    student = models.ForeignKey(Student) 
    course = models.ForeignKey(Course) 
    score = models.FloatField() 

、平均スコアは次のように計算されますスコアを出力します。どのように私は、DjangoのORMのAPIを使用して同じことを達成することができます

select ss.student_id, sum(ss.score * c.units)/sum(c.units) 
from dummy_studentscore ss 
join dummy_student s on s.id = ss.student_id 
join dummy_course c on c.id = ss.course_id 
group by ss.student_id 

:ここ

は、同等のSQLクエリ(Djangoのアプリ名をと仮定すると 'ダミー' である)ですか?オーケー

答えて

0

ので、私はそれを考え出した:

query = StudentScore.objects.values('student') \ 
     .annotate(result=ExpressionWrapper(Sum(F('score') * F('course__units'))/Sum('course__units'), 
              output_field=models.FloatField())) 
関連する問題