Django使用所有字段注释值

时间:2016-03-02 16:41:25

标签: django aggregate annotate

假设您有以下型号:

class Student(models.Model):
    student_no = models.IntegerField(primary_key=True)
    GPA = models.DecimalField(max_digits=65535, decimal_places=65535)
    year_of = days_on_market = models.IntegerField()

并且您希望将最高GPA与所有学生联系起来。你是怎么做的?我尝试过以下方法:

Student.objects.annotate(max_GPA = Max('GPA')).aggregate(Max('GPA'))

根据the documentation。但是,这并没有将最大GPA与每个学生联系起来。它只将最大GPA与记录的GPA相关联,该记录与记录的GPA相同,这与记录一样无用。它还返回一个字典{'GPA__max':4.3},但这不是代码的意图。

我查看了here,但是,此解决方案与另一个解决方案完全相同,即关联记录的最大GPA(而不是所有记录的最大GPA),这与GPA相同反正。

实际上,我希望4.3与每个学生联系。

任何有创意的解决方案?

1 个答案:

答案 0 :(得分:-1)

尝试删除aggregate部分:

students = Student.objects.annotate(max_GPA = Max('GPA')).all()  # or filter

你应该能够访问:

print students[0].max_GPA