Q는 django 내부 orm 으로 where 절에 or
문 혹은 and
문을 추가하고 싶을 때 사용한다.
다음은 로그인 검사 시 User 테이블에서 email
, phone_number
, username
중 하나와 비밀번호를 입력받았을 때 해당되는 정보가 없으면 INVAILD_USER 를 리턴하는 코드의 일부를 가져와봤다.
from django.db.models import Q
is_valid_account = User.objects.filter((Q(email=email) | Q(username=username) | Q(phone_number=phone_number)) & Q(password=password)).exists()
if not is_valid_account:
return JsonResponse({'message': 'INVALID_USER'}, status=401)
User.objects.filter((Q(email=email) | Q(username=username) | Q(phone_number=phone_number))
이 표현식은 다음과 완벽하게 동일하다.
User.objects.filter(email=email) | User.objects.filter(username=username) | User.objects.filter(phone_number=phone_number)
이걸 Q 객체를 사용해서 위 코드와 같이 간편하게 표현할 수 있는 것이다.
Q(password=password))
이제 앞에 or 연산으로 계산해서 나온 컬럼(들) 과
뒤에 패스워드를 & 연산으로 계산하면 매칭하는 결과 값이 나올것이다.
안나오면 로그인 실패이다.