2011-02-04 3 views
14

테이블의 각 개체에 대해 두 개의 필드 (집계 자체)의 합계를 검색하려고합니다.장고에서 .annotate()로 만든 필드에 .extra() 사용

다음은 후에 더 난 것을 약간을 설명 할 수 있지만 Unknown column in field list - 오류의 결과 :

items = MyModel.objects.annotate(
       field1=Sum("relatedModel__someField"), 
       field2=Sum("relatedModel__someField")).extra(
         select={"sum_field1_field2": "field1 + field2"}) 

나는 또한 필드 조회를 위해 F()를 사용하여 시도하지만 나에게 잘못된 SQL 문을 제공합니다 .

이 문제를 해결하는 방법에 대한 아이디어는 매우 높이 평가됩니다.

+0

'알 수없는 열'오류가 '주석'대신 '추가'오류를 나타 냅니까? 역 추적을 보여주세요. –

+0

'annotate' 만 사용하면 쿼리가 잘 실행됩니다. 두 합계가 반환 된 객체에 필드로 추가됩니다. 'extra'가 사용 된 경우에만 예외가 발생합니다. – jnns

+1

+1 : 동일한 문제가 발생했지만 여전히 해결책을 찾지 못했습니다! –

답변

4

이게 당신이 원하는 무엇입니까?

items = MyModel.objects.extra(
    select = {'sum_field1_field2': 'SUM(relatedModel__someField) + SUM(relatedModel__someField)'}, 
) 
+0

이 문제가 발생한지 꽤 오래되었지만 이것이 적절한 해결책으로 보입니다! 고맙습니다. – jnns

+1

다 대다 관계에 대해이 작업을 수행 할 수 없습니다. –

+0

Hii에서는 SUM 내부에 조건을 추가 할 수 있습니까? 예를 들어'''SUM (relatedModel__someField = True)''' –

0

는 다음과 같은 사용할 수 있습니다, 그것은 많은 또는 여러 하나 (역방향) 관계를 위해 많은 일을 만들려면 :

items = MyModel.objects.extra(
    select = {'sum_field1_field2': 'SUM("relatedModel"."someField") + SUM("relatedModel"."someField")'}, 
    ) 

을하지만 다른 주석을 필요로하는 경우이 같은도 중단됩니다 왜냐하면 extra는 GROUP BY 절에 명령문을 추가하는 반면 집계 함수는 거기에 허용되지 않기 때문입니다.

관련 문제