假设有一个模型 Shirts
,具有一个size
CharField,其值被限制为少量的选项,例如 'small','medium','large','xlarge' 等。
要按尺码分组获取衬衫,您可以执行以下操作:
Shirts.objects.order_by('size')
但是Django会自然地按字母顺序排列组,即先是“large”,然后是“medium”,然后是“small”,最后是“xlarge”。我想要的是在“medium”之前有“small”,在“large”之前有“medium”等。
也就是说,我想自然地执行以下伪代码:
size_order = {'small': 1, 'medium': 2, 'large': 3, 'xlarge': 4}
Shirts.objects.order_by('size_order[size]')
如何最好地实现这个目标?
编辑:请查看我对下面答案的评论,了解各种建议方法的想法。我偶然发现了一种使用SQL ORDER BY CASE语法的自定义Manager/QuerySet方法,正在调查中。