2010-02-11 4 views
3

(즉 아마 내가이 아무 것도 발견되지 않은 이유이며, 이것은 완전히 터무니없는 경우 알려 주시기 바랍니다.)입력 된 매개 변수의 순서를 쿼리에 적용시키는 방법이 있습니까?

이 이야기는 두 가지 모델 RankingArtist을 가지고, RankingArtist에 일반적으로 관련이 (object_id, content_type ... 전체 세방).

특정 필드 (내 경우 score)로 정렬 된 Ranking.objects.values_list()에 의해 반환 된 개체 목록이 있습니다. 그래서 순위를 매긴 아티스트의 목록을 표시하려면 동일한 순서로 표시해야합니다. 나는 .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] 

(난 그냥 정신을 위하여 두 번째 경우에 ID를주는거야.)

지금이 작업을 수행 할 수있는 유일한 방법은 비어있는 목록을 만들고 비 values_list() 쿼리를 통해 반복하는 것입니다.

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

이 단지 n 쿼리를 생산, 그래서 더 나은 방법이 있는지 궁금하네요. 태그에 표시된 것처럼 PostgreSQL을 사용하고 있습니다.

답변

2

이것은 장고로 인한 것이 아닙니다. 순서 지정이 지정되지 않았으므로 데이터베이스가이 순서대로 데이터베이스를 리턴합니다.

+0

PostgreSQL이 이것을 지원한다면 내 질문에 답해 주셔야합니다. –