@ekzotika

Как отсортировать Queryset в соответствии со списком?

Как отсортировать Queryset в соответствии со списком?

Например, делаю так:

m.objects.filter(id__in=[3,1,8])
И нужно, чтобы элементы в queryset шли по порядку, то есть сначала id=3, затем id=1, далее id=8 и т.д.

Но в итоге нужно, чтобы остался queryset, а не list!
  • Вопрос задан
  • 116 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Если выборка небольшая, то проще всего просто отсортировать список, полученный из queryset'а:
ids = [3,1,8]
result = sorted(m.objects.filter(id__in=ids), key=lambda i: ids.index(i.pk))

Но можно и средствами БД:
ids = [3,1,8]
conditions = Case(*[When(pk=pk, then=n) for n, pk in enumerate(ids)])
queryset = m.objects.filter(id__in=ids).order_by(conditions)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы