Django에서 계산 된 값으로 정렬하는 방법
-
06-09-2019 - |
문제
이봐, 나는 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를 참조하십시오 : 집계 필드 값으로 쿼리 세트를 주문하십시오
제휴하지 않습니다 StackOverflow