Django queryset自定义顺序



我想做一个查询集,它将首先按标题排序,然后按大小排序,但大小应该自定义排序,就像列表中的顺序一样。例如

order_size_ist = ['S', 'M', 'L', 'XL', 'XXL' ]
queryset = RawMaterial.objects.order_by('title', 'size')

尺寸顺序依次为S、M、L等。有什么想法吗?提前谢谢你:)

您可以使用Case-When序列将大小映射到整数,然后按这些整数排序:

from django.db.models importCase, Value, When
RawMaterial.objects.order_by(
'title',
Case(
*[When(size__iexact=siz, then=Value(i))
for i, siz in enumerate(order_size_ist)],
default=None
).asc()
)

最新更新