Есть несколько подходов.
- Если отправка не происходит слишком часто, но вы хотите отображать этот список очень часто, вы можете денормализовать таблицы, сохранив дату последней отправки в пользовательской таблице. Тогда это просто
User.objects.all().order_by('-last_submission_date')[:10]
. Если вы используете django.contrib.auth.models.User
, сделать это будет нелегко.
- Если вы хотите создать его на лету, это не так просто. Django может упорядочивать по столбцам из других таблиц, например,
User.objects.all().order_by('-submission__date')
, но вы не получите отчетливых результатов из-за объединения.
Для второго подхода лучший запрос, который я могу придумать сейчас:
User.objects.annotate(last_submission=models.Max('submission__date')).order_by('-last_submission')[:10]
Это, вероятно, не более эффективно, чем ваш подход, особенно если у вас много пользователей, но полезно, если вам нужно только получать этот список время от времени.