(즉 아마 내가이 아무 것도 발견되지 않은 이유이며, 이것은 완전히 터무니없는 경우 알려 주시기 바랍니다.)입력 된 매개 변수의 순서를 쿼리에 적용시키는 방법이 있습니까?
이 이야기는 두 가지 모델 Ranking
및 Artist
을 가지고, Ranking
는 Artist
에 일반적으로 관련이 (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을 사용하고 있습니다.
PostgreSQL이 이것을 지원한다면 내 질문에 답해 주셔야합니다. –