최대 1 분 소요

Django.db.models Q란?

django.db.models.Q는 Django에서 쿼리를 수행할 때, OR, AND와 같은 조건 연산자를 사용하여 복잡한 쿼리를 작성할 수 있게 해주는 클래스입니다. Q 객체는 데이터베이스의 필드와 비교할 수 있는 조건을 표현하는데 사용됩니다.

예를 들어, Q 객체를 사용하여 OR 연산자를 이용한 조건문을 만들 수 있습니다. 다음은 Q 객체를 사용하여 OR 연산자를 이용한 조건문을 작성하는 예시입니다.

from django.db.models import Q
from myapp.models import MyModel

result = MyModel.objects.filter(Q(field1='value1') | Q(field2='value2'))

위 코드에서 MyModel.objects.filter()는 데이터베이스에서 쿼리를 수행하고, Q(field1='value1') | Q(field2='value2')field1value1과 같거나 field2value2와 같은 결과를 반환하는 조건을 나타냅니다.

Q 객체는 & 연산자를 사용하여 AND 연산자를 표현할 수도 있습니다. ~ 연산자를 사용하여 NOT 연산자를 표현할 수도 있습니다.

Q 객체를 사용하면, 복잡한 조건을 간단하게 표현할 수 있습니다. 이는 Django ORM의 가장 강력한 기능 중 하나입니다.


Django Q 함수로 __icontains 사용

Q함수를 사용해 검색기능 제작방법

from django.db.models import Q

#template 으로 form 형태로 요청을 해야합니다.
def search(request):
  keyword = request.Get.get('keyword', '')
  
  if keyword:
    keyword_list = keyword_list.filter(
      #가져오는 데이터 이름 적기 / 필자는 제목검색을 구현했다 subject == 제목
    	Q(subject_icontains=keyword)
    ).distinct()

Q 함수에 subject_icontaions=keyword는 form으로 검색어를 제출했을때 문자열이 포함되었는지를 의미한다

댓글남기기