QuerySet
의 filter()
메서드는 Django에서 데이터베이스 쿼리를 필터링하는 데 사용됩니다. 이 메서드는 조건에 맞는 객체들을 반환합니다. 여러 조건을 지정할 수 있으며, 각 조건은 필드명__조건
형식으로 작성됩니다.
기본 사용법
ModelName.objects.filter(조건)
예제
예를 들어, Book
이라는 모델이 있다고 가정해보겠습니다. 이 모델에는 title
, author
, published_date
등의 필드가 있습니다.
- 단순 조건 필터링:
# title이 "Django Tutorial"인 책을 필터링 books = Book.objects.filter(title="Django Tutorial")
- 복수 조건 필터링:
# title이 "Django Tutorial"이고 author가 "John Doe"인 책을 필터링 books = Book.objects.filter(title="Django Tutorial", author="John Doe")
- 여러 조건을 동시에 사용할 수 있습니다. 이 조건들은 AND 조건으로 결합됩니다.
- lookup expressions (검색 표현식):
# title에 "Django"가 포함된 책을 필터링 books = Book.objects.filter(title__contains="Django") # published_date가 2023년 1월 1일 이후인 책을 필터링 books = Book.objects.filter(published_date__gte="2023-01-01")
- Django는 다양한
lookup
을 지원합니다. 예를 들어,__contains
,__gte
,__lte
등으로 필드 값을 세밀하게 필터링할 수 있습니다. - OR 조건 사용:
from django.db.models import Q # title이 "Django Tutorial"이거나 author가 "John Doe"인 책을 필터링 books = Book.objects.filter(Q(title="Django Tutorial") | Q(author="John Doe"))
- OR 조건을 사용하려면
Q
객체를 사용해야 합니다. - exclude()와 함께 사용:
# title이 "Django Tutorial"이 아닌 책을 필터링 books = Book.objects.exclude(title="Django Tutorial")
- 특정 조건을 제외하고 필터링할 수도 있습니다.
- 특정 값이
None
인 경우 필터링: # published_date가 None인 책을 필터링 books = Book.objects.filter(published_date__isnull=True)
추가 정보
filter()
메서드는 조건에 맞는 객체들의 QuerySet을 반환하며, 결과가 없을 경우 빈 QuerySet이 반환됩니다.filter()
와get()
의 차이점:filter()
는 여러 객체를 반환할 수 있는 반면,get()
은 하나의 객체만 반환하며, 조건에 맞는 객체가 없거나 여러 개가 있을 경우 예외를 발생시킵니다.
이처럼 filter()
메서드는 Django에서 매우 유연하고 강력한 도구로 사용됩니다.