문제

DateTime 필드에서 주문한 Foo 모델에서 최신 5 행을 가져옵니다.

qs = Foo.objects.all()[:5]

다음 단계에서는 쿼리 세트를 다른 기준 (실제로 동일한 DateTime 필드로 반대 방향으로)으로 재정렬하고 싶습니다. 그러나 슬라이스 후 재정렬은 허용되지 않습니다. Reverse ()는 첫 번째 순서를 취소하여 Differet Queryset을 제공합니다. 쿼리 세트에서 목록을 만들지 않고 사용하는 순서를 사용하지 않고 원하는 것을 달성 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

아니요, 그렇게 할 방법이 없습니다. order_by 데이터베이스에서의 작업이지만 쿼리 세트를 슬라이스하면 평가되며 그 후 데이터베이스로 돌아 가지 않습니다.

그래도 이미 해결책을 알고있는 것 같습니다. reversed() 평가 된 QS에서.

qs = reversed(Foo.objects.all()[:5])

다른 팁

Order_by는 SQL 다이타베이스 순서를 제공합니다. 당신은 이미 그것을 사용하고있는 다음 슬라이스하고 있습니다. 이 시점에서 결과는 메모리로 검색됩니다. 순서를 변경하려면 ORM 다이타베이스 분류가 아닌 Python In 메모리 분류를 사용해야합니다.

귀하의 경우, Daniel은 이미 최상의 솔루션을 제공했습니다. 단순히 같은 필드로 정렬하고 싶지만 다른 순서에서는 다음과 같이 목록을 반대로 반대하십시오.

qs = Foo.objects.all()[:5]
objs = reversed(qs)

다른 필드로 정렬하고 싶다면 사용자 정의 키 함수와 함께 Sorted () 함수를 사용합니다.

qs = Foo.objects.all()[:5]
objs = sorted(qs, key=lambda o: o.some_other_field)

늦은 답변이지만 이것은 저에게 효과적이었습니다.

import random
sorted(queryset[:10], key=lambda x: random.random())
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top