2013-04-28 2 views
0

저는 Python 3.2.3, Django 1.5 및 PostgreSQL을 사용하고 있습니다.Django .extra() 예상대로 작동하지 않습니다

나는 .extra()을 사용하는 것에 대해 이해하고 있으면 안되지만, 나는 실종 된 것이 절대적으로 우 'm 다. 이것은 내가 읽은 것에서부터 효과가있는 것처럼 보입니다.

vstats = Game.objects.filter(start_et__range=[start,end], 
            ).values(
            'vteam').annotate(
             vgames=Count('vteam'), 
             vscore=Sum('vscore'), 
             hscore=Sum('hscore'), 
             vscoreAVG=Avg('vscore'), 
             hscoreAVG=Avg('hscore')).extra(
        select={'vwins': "sum(vscore>hscore)"}) 

그것은 잘 작동 :

vscore = models.PositiveSmallIntegerField(blank=True,null=True, 
              verbose_name="Visitors Score") 
hscore = models.PositiveSmallIntegerField(blank=True,null=True, 
              verbose_name="Home Score") 

그리고 그것에서 일부 데이터를 얻기 위해이 코드 조각을 사용하고 있습니다 :

의 내가이 분야를 포함하는 모델을 가지고 있다고 가정 해 봅시다 단, extra()은 vscore가 hscore보다 큰 행 수를 얻으려고 시도하는 데 사용됩니다. 나는 심지어 결과를 얻는 사전에 vwins 키를 얻지 못한다. 그래서 나는 어떻게 든이 권리를 사용하지 않는다고 생각하고있다. 그게 내가 완전히 의아해하는 곳이다. 왜냐하면 나는 이것을 복사하여 the documentation에서 곧바로 붙여 넣고 나의 요구에 맞게 SQL 비트를 변경했기 때문이다. vstats 사전에 vwins 키가 포함되어있는 이유는 무엇입니까?

답변

0

문제는 values() method입니다. 당신이 여분의() 호출 후 값() 절을 사용하는 경우

은 추가의 선택 인수 (에 의해 정의 된 모든 필드) 명시 적으로 포함되어야합니다

여기 장고 문서에서 관련 인용입니다 values ​​() 호출에서. values ​​() 호출 후에 만들어진 extra() 호출은 여분의 선택된 필드를 무시하게됩니다.

그래서 당신은 아마 원하는 것입니다 :

vstats = Game.objects.filter(start_et__range=[start,end], 
           ).annotate(
            vgames=Count('vteam'), 
            vscore=Sum('vscore'), 
            hscore=Sum('hscore'), 
            vscoreAVG=Avg('vscore'), 
            hscoreAVG=Avg('hscore')).extra(
       select={'vwins': "sum(vscore>hscore)"}).values(
           'vteam', 'vwins', 'vgames', 'vscore', 'hscore', 
           'vscoreAVG', 'hscoreAVG') 

이 쿼리는 당신이 SELECT 절에 원하는 코드를 포함하지만, 그것은 잘못된 SQL 코드를 생성하기 때문에 그것은 실패합니다.

+0

고마워요! 나는 그것이 작동하고 있다고 생각한다. 그러나 Django는 DB 오류가 있다고 말한다. PostgreSQL 9.0 문서에 http : // www.라고 쓰여져 있기 때문에 "function sum (boolean)은 존재하지 않는다."라는 말이있다. postgresql.org/docs/9.0/static/functions-aggregate.html – Zamphatta

관련 문제