Последние трудно сделать в ванильном Django без большой работы (макс, среднее и т. Д. Все можно сделать с помощью аннотаций и агрегаций).
Я делаю это с помощью специального менеджера, например:
class AuthorManager(models.Manager):
def with_recent_rating(self):
return super(AuthorManager, self).get_query_set().extra(
select={
'recent_rating': '''
SELECT e.rating
FROM myapp_entry e
WHERE e.authors_id = myapp_author.id
ORDER BY e.pub_date DESC
LIMIT 1
''',
})
Затем добавьте в модель Author следующее:
class Author():
...
objects = AuthorManager()
Затем, когда вы хотите, чтобы авторы с оценками просто запрашивали:
authors = Author.objects.with_recent_rating().filter(...)
Это практическита же скорость, что и у любой другой выборки, за исключением того, что теперь авторы имеют поле недавних оценок ::1012*
for author in authors:
print author.recent_rating