In SQL, this would be (and I'm winging this right now so I might be
slightly off)

SELECT name, address, `date`, test_name, grade
FROM Student as stu
LEFT JOIN Grade ON stu.id = Grade.student_id
WHERE `date` >=
    (SELECT max(`date`) FROM Grade WHERE student_id = stu.id)
ORDER BY name

Unless you have an extremely large amount of students you're filtering
on I'd use the following:

for s in Students.objects.order_by('name'):
    grades = Grade.objects.filter(student_id=s.id).order_by('-date')[:
1]
    if len(grades) > 0:
        # use the grades object to print the latest grade
        pass
    else:
        # there is no grade for this student
        pass

I'd have to investigate whether the ORM will optimize this, but I
doubt it does (currently). It's possible there is a better way, but I
don't know of one without resorting to SQL.







On Jan 28, 1:57 pm, Michael Shepanski <mjs7...@gmail.com> wrote:
> Is it possible to code this scenario using the Django ORM?
>
> I have two tables:
>   STUDENT: id, name, address
>   GRADES: id, student_id, date, test_name, grade
>
> Each Student will have several entries in the Grades table. I am
> wondering if it is possible using Django's ORM to select all students
> along with their *latest* grade information. I basically want a result
> table that looks like the following, where date, test_name, and grade
> are for the latest result (by date).
>
> LATEST_GRADES: id, name, address, date, test_name, grade

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to