2014-09-03 1 views
4

건설 후 Django Q() 객체를 수정할 수 있습니까? 그래서 같이 Q() 객체를 생성 :건설 후 Django Q() 객체를 수정할 수 있습니까?

q2 = Q(foo=1, bar=2) 

:

q = Q(foo=1) 

나중에 I이 제작 한 경우와 동일하게 q을 변화시킬 수있다? 내가 찾을 수있는 Django docs에는 그러한 인터페이스에 대한 언급이 없습니다. 내가 좋아하는 뭔가를 찾고 있었다

:

Q.append_clause(bar=2) 
+0

"동일하게 구성한 것"이 정확히 무엇을 의미합니까? 즉석에서 q 객체를 수정한다는 의미입니까? – karthikr

+0

@karthikr : 내가 찾고있는 것을 더 잘 설명하는 질문이 업데이트되었습니다. –

+0

확인. PerrinHarkins의 대답은 당신이 찾고있는 것입니다. – karthikr

답변

5

당신은 또 다른 Q() 객체를 만들 수와 함께 : q2 = q & Q(bar=2)

+2

의미상으로 동일합니까? 그것은 있을지도 모른다. 그러나 나는 잡았다가 될 수있다라는 것을 알고있다. 예를 들어'.filter (Q (parent__foo = 1)). filter (Q (parent__bar = 1))'호출은'.filter (Q (parent__foo = 1, parent__bar = 1))와는 다르다. 그런 식으로 겁 먹고 싶다. –

+1

예, 동일합니다. 중요한 것은 두 개의 .filter 호출이 있거나 하나만있는 경우입니다. – akaariai

3

당신은 Q를 추가 할 수 있습니다 자신의 add 방법을 사용하여, 함께 객체. 예를 들어 :

>>> q = Q(sender=x) 
>>> q.add(Q(receiver=y), Q.AND) 

add에 두 번째 인수는 Q.OR

편집 할 수있는 커넥터입니다 : 내 대답은 단지 페린 킨스가 무엇을 제안하고 있지만 다른에 대한 다른 방법입니다 걱정, 당신이 쿼리를 만드는 방식에 따라 filter의 다른 행동에 관해서는 Q 객체에 합류하면 그것에 대해 걱정할 필요가 없습니다. 내 예제는 filter(sender=x, receiver=y)과 같고 filter(sender=x).filter(receiver=y)이 아니기 때문에 빠른 테스트에서 볼 수있는 한 Q 개체가 즉각적 AND 절을 사용하고 다중 값 관계에 대해 filter의 특수 동작을 수행하지 않기 때문에 예제는 filter(sender=x).filter(receiver=y)이 아닙니다.

어쨌든 SQL을보고 정말로 특정 쿼리에서 동일한 작업을하는 것과 같은 것은 없습니다.

관련 문제