Så vitt jag är medveten om finns det ingen generisk Django-lösning på detta. Du kan minska din minnesanvändning och begränsa dina db-frågor genom att bygga en id/question_code-uppslagsstruktur
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'])
Förutsatt att du vill bläddra resultaten kan du sedan dela upp ordered_question_codes, utföra en annan fråga för att hämta alla frågor du behöver sortera dem efter deras position i den delen
#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])
Om uppslagsstrukturen fortfarande använder för mycket minne, eller tar för lång tid att sortera, måste du komma på något mer avancerat. Detta skulle verkligen inte skalas bra till en enorm datauppsättning