조용하고 맑은 하늘에는 무지개가 없다
ALL ABOUT ME
Developer + DBA + Daily
Q객체
DATE 2022/07/12

 프로젝트 중 filter 조건을 2개 이상 걸어야할 필요가 생겼다. memo테이블에서 plan_pk 속성의 값이 null값인 쿼리셋을 가져오는 데에 어려움이 있었다. 구글링을 통해 검색을 해보니 Q객체를 사용하여 여러 조건을 걸수 있었고, 이에 대해 정리해보려고 한다.

from django.db.models import Q
MemoModel.objects.filter(Q(plan_pk='')|Q(plan_pk=None))

>> 위 코드는 주어진 문제를 해결한 코드 방식이다.

Q 사용 다른 방식

from django.db.models import Q

q = Q()

q.add(Q(name='ominyoung', q.OR)
q.add(Q(address=2, q.AND)
q.add(Q(rate=1, q.OR)

Memo.objects.filter(q)

>> 위 코드를 쿼리문으로 바꾸면 다음과 같다.

SELECT * FROM memo WHERE (name=ominyoung AND address=2 OR rate=1)

>> Q() 선언후 add()로 추가할때 앞의 조건과 2번째 인자값으로 연결하는 모습을 볼 수 있다.

 

yunicorn