想象一个Shirts
带有size
CharField 的模型,其值仅限于少数选择,例如“small”、“medium”、“large”、“xlarge”等。
要按尺寸对衬衫进行分组,您可以:
Shirts.objects.order_by('size')
但是 Django 会(自然地)按字母顺序对组进行排序,即“大”然后“中”然后“小”然后“超大”。我想要的是在“大”之前的“中”之前有“小”等。
即我自然想做的是类似于以下伪代码:
size_order = {'small': 1, 'medium': 2, 'large': 3, 'xlarge': 4}
Shirts.objects.order_by('size_order[size]')
实现这一目标的最佳方法是什么?
编辑:有关各种建议方法的想法,请参阅我对下面答案的评论。我偶然发现了一种使用我正在调查的 SQL ORDER BY CASE 语法的自定义 Manager/QuerySet 方法。