Сохранять результаты Thread в списке после того, как они были порождены, и повторите этот список - во время итерационного вызова. Вы все равно присоединяетесь линейно, но должны делать то, что хотите.
Как предложено @AnupYadav для запроса raw
. Я пришел с этим MySQL Query
SELECT * FROM timesheet_entry t1 INNER JOIN ( SELECT timesheet_users_id, MAX(id) AS latest_id FROM timesheet_entry GROUP BY timesheet_users_id ) t2 ON t1.timesheet_users_id = t2.timesheet_users_id AND t1.id = t2.latest_id
Это мой вид, где я использовал запрос
class ReportView(LoginRequiredMixin, generic.TemplateView):
template_name = 'admin/clock/report.html'
def get_context_data(self, **kwargs):
context = super(ReportView, self).get_context_data(**kwargs)
context['reports'] = TimesheetEntry.objects.raw('SELECT * FROM timesheet_entry t1 INNER JOIN ( SELECT timesheet_users_id, MAX(id) AS latest_id FROM timesheet_entry GROUP BY timesheet_users_id ) t2 ON t1.timesheet_users_id = t2.timesheet_users_id AND t1.id = t2.latest_id')
return context