Доколкото ми е известно, няма общо решение на Django за това. Можете да намалите използването на паметта си и да ограничите своите db заявки, като изградите структура за търсене на id/question_code
from natsort import natsorted
question_code_lookup = Question.objects.values('id','question_code')
ordered_question_codes = natsorted(question_code_lookup, key=lambda i: i['question_code'])
Ако приемем, че искате да страниците резултатите, можете след това да разделите ordered_question_codes, да изпълните друга заявка, за да извлечете всички въпроси, от които се нуждаете, да ги подредите според позицията им в този фрагмент
#get the first 20 questions
ordered_question_codes = ordered_question_codes[:20]
question_ids = [q['id'] for q in ordered_question_codes]
questions = Question.objects.filter(id__in=question_ids)
#put them back into question code order
id_to_pos = dict(zip((question_ids), range(len(question_ids))))
questions = sorted(questions, key = lambda x: id_to_pos[x.id])
Ако структурата за търсене все още използва твърде много памет или отнема твърде много време за сортиране, тогава ще трябва да измислите нещо по-усъвършенствано. Това със сигурност няма да се мащабира добре до огромен набор от данни