2011-03-04 4 views
1

Django : 플로트 정밀도를 사용하여 계산 된 필드를 정렬하는 방법?

다음과 같은 모델이 있습니다.

class Program(models.Model): 
votes_sum = models.IntegerField(max_length=10, default=0) 
voters_counter = models.IntegerField(max_length=10, default=0) 
... 

그리고 10 개의 가장 높은 등급의 프로그램이 있습니다.

best_rated = Program.objects.filter(Q(creator__profile__type = 'us') & ~Q(voters_counter = 0)).extra(select={ 'total' : 'votes_sum/voters_counter' }).extra(order_by=['-total'])[:10]

그러나 float 정밀도를 사용해야합니다! 3.75 점이있는 프로그램은 3.25 점으로 프로그램 전에 있어야하기 때문에. 시도 :

.extra(select={ 'total' : 'float(votes_sum)/float(voters_counter)' })

그러나이 구문은 불가능합니다!

도움이 필요하십니까? 부디.

미리 감사드립니다!

+0

왜 'order_by'매개 변수를 두 번째 extra()로 보냅니 까? 또한 형성중인 실제 SQL 쿼리 문자열을 조사해야합니다. – rubayeet

+0

계산 된 입력란으로 주문하는 유일한 방법은 extra()를 사용하는 것입니다. 다른 것이 있니? – Joeya

답변

0

best_rated Program.objects.filter = (Q (creator_ 프로필 _type = '우리') & ~ Q (voters_counter = 0)) 엑스트라 (= { '전체'를 선택하십시오. "1.0 * votes_sum/voters_counter를 ' })

관련 문제