2014-12-22 2 views
0

다음과 같은 쿼리가 있습니다 : Foo.objects.extra(select={'extra_column':'SELECT ...'})extra_column에 필터링하고 싶지만 필터에서이 별칭을 가져올 수 없습니다. 나는 annotate()을 사용하려고 생각하고 있지만, annotate()select 절에서 사용할 수 있습니다. 모든 튜토리얼은 SUM 등에 있습니다. 나는 또한 HAVING 절을 시도했지만 장고는 을 extra()에 지원하지 않습니다.Django : 여분의 열을 필터링하는 방법은 무엇입니까?

모든 의견을 보내 주시면 감사하겠습니다.

편집 :

장고 1.6, MySQL의

좀 복잡한 조건의 쿼리입니다, 그래서 서브 쿼리를 작성하는 extra()를 사용해야합니다. 하지만 filter()을 사용하여 하위 쿼리의 별칭에 액세스 할 수는 없습니다. 나중에 filter()에서 액세스 할 수있는 annotate()으로 바뀌었지만 SUM, MAX, MIN, AVG에서만 작동하는 것처럼 보였으므로 내 맞춤 SELECT 하위 쿼리에서 사용할 수 없습니다.

나는 비슷한 질문을 여기에서 읽었다 : Django ORM: Filter by extra attribute. MySQL에서 별칭에 대한 쿼리를 수행 할 때 HAVING 절을 사용해야한다고 말했습니다.

이 문제가 PostgreSQL과 같은 다른 SQL 백엔드 또는 더 높은 버전의 장고에 있는지 궁금합니다. MySQL과 Django1.6에서이 질문에 대한 기본 제공 솔루션이 없을 수도 있습니까?

+0

당신은 당신이 여분의 쿼리를 수행하려고 무엇을 설명 할 수 있습니까? 조인이나 간단한 주석을 사용하여 해결할 수도 있습니다. 또한 장고 버전을 사용하고 있습니까? – Blackeagle52

+0

@ Blackeagle52 업데이트 됨. –

답변

0

비슷한 질문에 대한 올바른 대답으로 언급하고 있습니다. 필터를 사용할 수 없습니다 (filter()은 모델 정의 만 검사하기 때문에). where 절을 포함하는 다른 extra을 사용하는 것이 좋습니다.

장고 1.7으로

Foo.objects\ 
    .extra(select={'extra_column':'SELECT ...'})\ 
    .extra(where=["extra_column = %s"], params=[value]) 

당신이 조회 작업 할 수는 :
https://docs.djangoproject.com/en/1.7/howto/custom-lookups/

+1

실제로 extra는 SQL에서 where 절을 렌더링합니다. 그러나 MySQL에서는 여기에 필요합니다. 그래서 마침내 원시 SQL을 사용했습니다. –

관련 문제