2011-04-29 3 views
0

검색 횟수가 많지 않으므로 지금까지 아무 것도 발견되지 않았습니다.아직 다른 QuerySet 사용자 지정 순서 문제

내 장고 응용 프로그램에서 Model_X는 매우 표준 등급 모델을 사용하는 사용자가 평가합니다. 필자는 많은 양의 데이터를 처리하는 독립형 함수를 가지고 있으며 사용자 인스턴스가 주어지면 튜플 목록을 반환합니다. 첫 번째 값은 Model_X의 인스턴스에 대한 기본 키에 해당하고 두 번째 값은 예측 된 등급입니다. 예를 들어 다음과 같은 튜플 목록을 반환 할 수 있습니다.

[(1L, 5.25), (5L, 3.1), (23L, 1.83)] 

은 내가 검색어 세트를 반환해야 (그리고 그것은 검색어 세트 할 필요)에만 튜플에서 이러한 예측 등급으로 분류 튜플에 나와있는 인스턴스를 포함 Model_X의.

+0

내가 정렬 파이썬() 함수를 사용하여이 작업을 수행 할 수 있다는 것을 알고 있지만, 내 이해에 정렬() 함수를 수행 할 수없는 검색어 세트를 반환이 필요합니다. –

+0

모델을 설명하는 코드를 추가 할 수 있습니까? 나는 당신의 모범이 나타내는 것을 정확히 얻지 못한다. 하나의 모델과 인스턴스 또는 다른 모델의 인스턴스 결합 된 필드 값 –

+0

나는 조금 더 명확하게하기 위해 내 질문에 대해 다시 언급했다. 이게 도움이 되나요? 이 과정에서 모델의 필드 값이 전혀 적용되지 않습니다. –

답변

0

QuerySet 대신 목록을 사용하십시오. in_bulk

+0

QuerySet을 반환하는 솔루션을 찾고있는 여러 곳에서 매우 구체적입니다. –

1

등급 튜플 목록이 이미 주문 된 경우 Ordering by the order of values in a SQL IN() clause의 항목을 사용할 수 있습니다.

MySQL을 사용하는 경우 field() 함수가 작동해야합니다. 정렬 된 등급 튜플의 모든 ID를 [x[0] for x in sorted_tuples]으로 가져온 다음 해당 ID 목록을 사용하여 where 절을 만듭니다. (테스트되지 않은),

Model_X.objects.raw('select * from myapp_model_x where id in (5,1,23) order by field(id,5,1,23)']) 
+0

제가 잘못하고있을 수도 있지만 구문을 사용하면 where 문 안의 'order by field ...'문에서 시작하는 오류가 발생합니다. –

+0

아, 불행합니다. 제대로 실행하려면 [원시 쿼리] (http://docs.djangoproject.com/en/dev/topics/db/sql/)로 내려야 할 수도 있습니다. MySQL을 사용하고 있습니까? –

+0

파이썬의 정렬 방식을 사용하고 제 견해를 재 작성하는 제 대안에 의지 할 것입니다. 나는 이것이 할 수 없다고 믿을 수 없다. 해결해야 할 주요한 부족한 것 같습니다. –