Пользовательский заказ 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 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()
)
Вернуться на верх