이전 OR연산자에 이어 두번째입니다.
이번에는 AND연산자를 한번 조져 볼게요.
and
연산으로는 조건1, 조건2 둘중 하나만 만족하는게 아니라!!!
조건1과 조건2 두 마리 토끼를 잡으려는 욕심 많은 녀석이라는거!
차이를 이해하셔야해요.
이름이 R로 시작하고 성이 D로 시작하는 모든 사용자를 한번 조져볼까요?
filter(<condition_1>, <condition_2>)
queryset_1 & queryset_2
filter(Q(<condition_1>) & Q(<condition_2>))
select username, first_name, last_name, email from auth_user where first_name like 'R%' and last_name like 'D%';
걍 중간에 and 있는거 보이조? queryset_1 = User.objects.filter(first_name__startswith='R', last_name__startswith='D')
&
연산자 요넘이 and
와 동일한 의미를 가지고 있다는거~queryset_2 = User.objects.filter(first_name__startswith='R') & User.objects.filter(last_name__startswith='D')
django shell에서 화면 너무 뺵빽하면 한번 밀고 싶조? 그때 싹~ clear해줍니다.
Import os
os.system("clear") # Linux - OSX
os.system("cls") # Windows
화면 쏵~ 밀어줍니다.
> .shell clear;
Q객체 쓴다고 filter 아예 안쓰는거 아니에요~
queryset_3 = User.objects.filter(Q(first_name__startswith='R') & Q(last_name__startswith='D'))
언제나 django orm에서 만든 SQL을 확인하는 습관은 오류도 잡고 실력도 키우는 누이 좋고 매부좋고 도랑치고 가재잡는 그런 역할이 된다는 사실¯_(ツ)_/¯
>>> str(queryset_3.query)
'SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE ("auth_user"."first_name" LIKE R% ESCAPE \'\\\' AND "auth_user"."last_name" LIKE D% ESCAPE \'\\\')'
>str(queryset_1.query) == str(queryset_2.query) == str(queryset_3.query)
#Output: True