Q의 재밌는 점

hyuckhoon.ko·2022년 8월 22일
0
Poll.objects.get(
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)),
    question__startswith='Who',
)

위 ORM에 대응하는 쿼리는 다음과 같다.

SELECT * 
  FROM polls 
 WHERE question LIKE 'Who%'
   AND (pub_date = '2005-05-02' OR pub_date = '2005-05-06')

하지만 아래와 같은 ORM은 잘못됐다.

# INVALID ORM
Poll.objects.get(
    question__startswith='Who',
    Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)

왜냐하면

ORM으로 룩업(filter)를 진행할 때 보통 Q 객체와 키워드 인자를 사용하기 마련이다. 특히, Q가 전달될 때, Q객체는 반드시 키워드 인자보다 앞서있어야 한다.

0개의 댓글