Кортежи отсортированы лексикографически, поэтому, если вы вернете кортеж для аргумента key = аргумент, вы можете отсортировать по голосам, а затем по датам:
posts_list = sorted(posts_list, key=lambda post: (Vote.objects.get_score(post)['score'], post.datetime))
В качестве альтернативы вы также можете посмотреть опцию ordering
в мета-классе модели django или метод order_by
в django Queryset. Они будут выполнять сортировку базы данных в одном запросе, поэтому могут быть намного быстрее. Кроме того, вы можете попробовать использовать posts_list.get_score_in_bulk (), чтобы уменьшить количество запросов до двух (один для posts_list и один для get_score_in_bulk), например так:
scores = Vote.objects.get_score_in_bulk(posts_list)
posts_list = sorted(posts_list, key=lambda post: (scores[post.id]['score'], post.datetime))