﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
28756	QuerySet API .extra( ) usage for FIELD + ORDER BY of queryset	Brandon	nobody	"I have reoccurring situation, when in a view.py function I need a queryset ordered by a set of identifiers. The order of those identifiers is dependent on factors outside of my control. Essentially in my view I am using modelformset_factory to generate a modelformset, then the usage of that modelformset instance requires queryset. It is that final queryset that must be ordered by the identifier whose order is externally determined.
So I use the .extra( ) function like below:

{{{#!python
quali_results = ToxicologyCaseQualitativeResult.objects.filter(case_id=case.id).select_related('test').order_by('test__name')

field_list = [""AMPHS"",""BARB"",""BNZ"",""BE"",""Ecstasy"",""METH"",""6AM"",""PCP"",""THC""] #Usually populated via retrieval of user settings.
if len(field_list) > 0:
    field_list = field_list + [q.test.identifier for q in quali_results]
    fields = '""'+'"",""'.join(str(field) for field in field_list)+'""'
    field_sql = ""FIELD(`identifier`,""+fields+"")""
    quali_results = quali_results.extra(select={'field_sql' : field_sql}, order_by=['field_sql'])

quali_resultfs = QualitativeResultFormset(queryset=quali_results, prefix='quali_results')
}}}

If there is a better way to do this, I would be happy to change.
Cheers!
--Brandon"	Uncategorized	closed	Database layer (models, ORM)	1.11	Normal	invalid	QuerySet.extra		Unreviewed	0	0	0	0	0	0
