2016-03-02 64 views
1

假設你有以下型號:Django的註釋值與各界

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__max':4.3},但這不是代碼的意圖。

我看了here,但是,這個解決方案與另一個解決方案做的是一樣的,即關聯記錄的最大GPA(而不是所有記錄的最大GPA),這與GPA一樣。

實際上,我希望4.3與每個學生都有關聯。

任何有創意的解決方案?

+0

嗯,這似乎很奇怪,你想這......似乎是最大的GPA與其他每個學生無關......只要有一個綜合查詢並將結果傳遞給任何需要的東西,是否可能? –

回答

0

嘗試取出aggregate部分:

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

而且你應該能夠訪問:

print students[0].max_GPA 
+0

不工作。 max_GPA將始終等於GPA的記錄。所以,學生[0] .max_GPA!=學生[1] .max_GPA。 – EarlyCoder

+0

如果每個學生只有一個GPA,你期望什麼?請更具體 – Gocht