2016-03-02 2 views
1

, у вас есть следующие модели:Джанго Аннотируйте значение со всеми полями

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() 

и вы хотите связать самый высокий средний балл со все студентами. Как вы это делаете? Я пробовал следующее:

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

Согласно the documentation. Но это не связывает максимальное количество GPA с каждым учеником. Это связано только с максимальным GPA для записи, которая совпадает с GPA этой записи с записью, которая так же бесполезна, как и получается. Он также возвращает словарь {'GPA__max': 4.3}, но это не намерение кода.

Я посмотрел here, но это решение делает то же самое, что и другое, а именно сопоставление максимального ГПД записи (а не максимального ГПД всех записей), что в любом случае совпадает с 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! = Student [1] .max_GPA. – EarlyCoder

+0

Если у каждого ученика всего один GPA, что вы ожидаете? пожалуйста, уточните – Gocht

Смежные вопросы