문제

이봐, 나는 django의 계산 된 값을 기준으로 객체를 정렬하고 싶다 ... 어떻게해야하나요?

다음은 내 곤경을 설명하는 스택 오버플로를 기반으로 한 예제 사용자 프로필 모델입니다.

class Profile(models.Model):
    user = models.ForeignKey(User)

    def get_reputation():
        ... 
        return reputation
    reputation = property(get_reputation)

따라서 명성으로 사용자를 정렬하고 싶다고 말합니다. 어떻게해야하나요? 나는 당신이 이것을 할 수 없다는 것을 알고 있습니다.

Profile.objects.order_by("-reputation")

여러분의 도움에 감사드립니다. :)

도움이 되었습니까?

해결책

데이터베이스에서 정렬을 수행 해야하는 경우 (레코드가 많고 예를 들어 페이지를 찍어야하기 때문에), 유일한 실제 옵션은 평판을 비정규 화 된 필드로 바꾸는 것입니다 (예 : 재정의에서 업데이트 된 것입니다. save() 모델의 메소드).

다른 팁

계산 코드는 Python 내에서만 존재하므로 Python에서도 정렬을 수행해야합니다.

sorted (Profile.objects.all (), key = lambda p: p.reputation)

django-1.8에서 사용하여 쿼리 세트를 정렬 할 수 있습니다. 쿼리 표현식 계산 된 값이 SQL로 렌더링 될 수있는 한. 당신은 또한 사용할 수 있습니다 annotations 모델로 order_by 기간.

from django.db.models import F
Profile.objects.annotate(reputation=(F('<field>') + ...)).order_by("-reputation")

기본 작업과 같은 +, -, *, / 그리고 ** 함께 사용할 수 있습니다 F(). 또한 다음과 같은 몇 가지 다른 기능이 있습니다 Count, Avg, Max, ...

연결:

이것도 Q & A를 참조하십시오 : 집계 필드 값으로 쿼리 세트를 주문하십시오

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top