Пользовательский заказ 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()
)