Есть ли способ заставить запрос соблюдать порядок введенных параметров?

StackOverflow https://stackoverflow.com/questions/2247892

Вопрос

(Пожалуйста, дайте мне знать, если это полный абсурд, вероятно, именно поэтому я ничего не нашел по этому поводу.)

У этой истории есть две модели Ranking и Artist, Ranking в целом относится к Artist (object_id, content_type...вся эта ерунда).

У меня есть список объектов, возвращаемых Ranking.objects.values_list() упорядочено по определенному полю (в моем случае score).Поэтому очевидно, что если я хочу отобразить список артистов, которые были оценены, я бы хотел, чтобы они были в том же порядке.Я пробовал разные методы, например .filter(pk__in=list), .in_bulk(list), и т. д.Пытался принудительно получить результат .values_list() тоже в кортеж.

Они все берут мой список:

>>> objects = Ranking.objects.filter(<stuff>).order_by('score')
>>> objects_list = objects.values_list('object_id', flat=True)
>>> objects_list
[8, 1, 2, 15, 14, 3, 13, 31, 16, 5, 4, 7, 32, 9, 37]

И верните его так:

>>> Artist.objects.filter(id__in=objects_list).values_list('id', flat=True)
[7, 32, 3, 8, 4, 2, 31, 9, 37, 13, 16, 1, 5, 15, 14]

(Я просто даю идентификаторы во втором случае ради здравомыслия.)

Сейчас единственный способ заставить это работать — создать пустой список и перебрать не-values_list() запрос.

for item in objects:
    ranked_items.append(item.content_object)

Это просто производит n запросы, поэтому мне интересно, есть ли лучший способ.Как видно из тегов, я использую PostgreSQL.

Это было полезно?

Решение

Это не вызвано Django;ваша база данных возвращает их в этом порядке, поскольку порядок не указан.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top