値が少数の選択肢に制限されているCharFieldを持つモデルShirts
を想像してください。たとえば、「小」、「中」、「大」、「x大」などです。size
シャツをサイズ別にグループ化するには、次のようにします。
Shirts.objects.order_by('size')
ただし、Djangoは(当然のことながら)グループをアルファベット順に並べます。つまり、「大」、「中」、「小」、「xlarge」の順になります。私が欲しいのは、「大」の前に「中」の前に「小」を置くことです。
つまり、私が自然にやりたいことは、次の擬似コードのようなものです。
size_order = {'small': 1, 'medium': 2, 'large': 3, 'xlarge': 4}
Shirts.objects.order_by('size_order[size]')
これを達成するための最良の方法は何ですか?
編集:さまざまな提案されたアプローチについての考えについては、以下の回答に対する私のコメントを参照してください。調査しているSQLORDERBYCASE構文を使用したカスタムManager/QuerySetアプローチに遭遇しました。