2010-06-14 4 views
0

나는 장고에서 querysets의 조합을 취할 방법을 찾고있다. 내가 읽은 바로는 query1 | union을 취하기 위해 query2 ... 이것은 비록 values ​​()를 사용할 때 작동하지 않는 것처럼 보입니다. 나는 합집합을 취할 때까지 값을 사용하지 않고 건너 뛸 수 있습니다. 그러나 주석을 사용하여 필드와 필터의 합계를 취해야하고 "그룹 기준"을 수행 할 방법이 없기 때문에 값()을 사용해야합니다. 내가 읽은 다른 제안은 Q 객체를 사용하는 것이지만 작동 할 수있는 방법을 생각할 수는 없습니다.Union on ValuesQuerySet in django

나는 곧바로 SQL을 사용해야 할 필요가 있는가, 아니면 이것을 수행하는 장고 방법이 있는가?

q1 = mymodel.objects.filter(date__lt = '2010-06-11').values('field1','field2').annotate(volsum=Sum('volume')).exclude(volsum=0) 
q2 = mymodel.objects.values('field1','field2').annotate(volsum=Sum('volume')).exclude(volsum=0) 
query = q1|q2 

그러나 합계 그것이 이후 행동하는 방법을 알 수있는 다른 방법이 없기 때문에이 일을하고 지금까지 내가 내가 "값"을 필요로 알고에 포함되지 않습니다

내가 원하는 것은 15 열 테이블.

답변

2

QuerySet.values()QuerySet이 아니라이 작업을 지원하지 않는 ValuesQuerySet을 반환합니다. 그들을 list으로 변환 한 다음 추가하십시오.

query = list(q1) + list(q2) 
+0

이것은 노동 조합과 조금 다릅니다 ... q1과 q2에 겹침이 있으면 쿼리의 중복 항목이 생깁니다. 나는 (q1) 세트를 시도했다 | set (q2)하지만 사전은 기본적으로 해시 가능합니다. – Wuxab

+0

해쉬가없는 타입을 사용하는 경우에도 파이썬에서 두리스트의 적절한 조합을 얻으려면 꽤 많은 기법이 있습니다. 또는 최악의 경우 Schwartzian 변환을 사용하여이를 모두 dict에 넣을 수 있습니다. http://en.wikipedia.org/wiki/Swwartzian_transform –