Sejauh yang saya ketahui tidak ada solusi Django generik untuk ini. Anda dapat mengurangi penggunaan memori dan membatasi kueri db Anda dengan membangun struktur pencarian 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'])
Dengan asumsi Anda ingin membuat halaman hasil, Anda kemudian dapat mengiris kode_pertanyaan_pesanan, lakukan kueri lain untuk mengambil semua pertanyaan yang Anda perlukan, urutkan sesuai dengan posisinya di irisan itu
#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])
Jika struktur pencarian masih menggunakan terlalu banyak memori, atau terlalu lama untuk menyortir, maka Anda harus membuat sesuatu yang lebih maju. Ini tentu saja tidak akan menskalakan dengan baik ke kumpulan data yang besar