首页 > 解决方案 > Django 查询集自定义顺序

问题描述

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

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

尺寸应先订购 S,然后订购 M,然后订购 L,依此类推。有任何想法吗 ?先感谢您 :)

标签: djangosortingdjango-querysetcustom-sort

解决方案


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

from django.db.models import Case, 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()
)

推荐阅读