2010-02-11 3 views
3

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

Эта история имеет две модели Ranking и Artist, Ranking является генетически связанной с Artist (object_id, content_type ... весь shebang).

У меня есть список объектов, возвращенных 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.

ответ

2

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

+0

Спасибо, я думаю, мой вопрос должен быть, если PostgreSQL поддерживает это. –

Смежные вопросы