Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Classificação Natural do Django Query


Tanto quanto sei, não há uma solução genérica do Django para isso. Você pode reduzir seu uso de memória e limitar suas consultas de banco de dados criando uma estrutura de pesquisa 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'])

Supondo que você queira paginar os resultados, você pode dividir os códigos_questões_ordenadas, realizar outra consulta para recuperar todas as perguntas necessárias, ordená-las de acordo com sua posição nessa fatia
#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])

Se a estrutura de pesquisa ainda usar muita memória ou demorar muito para classificar, você terá que criar algo mais avançado. Isso certamente não seria bem dimensionado para um grande conjunto de dados