보통
User.objects.filter(email = email)
을 하게되면 User 데이터 베이스에서 해당하는 email 이 있는지 찾아줘서 쿼리셋으로 보내준다.
모델.objects.filter(필드이름__lookup = 값)
__contains
In [9]: Product.objects.filter(name__contains="얼")
Out[9]: <QuerySet [<Product: Product object (5)>]>
name 필드에 얼이 포함되어있는 데이터를 가져와서 쿼리셋으로 뿌려주게 됩니다.
__icontains
case-insensitive(무감각한) 로써 대소문자 구분없이 판단합니다.
icontains 는 대소문자 구분하지 않고 가져오게 된다 .
User.objects.filter(name__icontains="J")
QuerySet [<User: jakdu : jakdu@mail.com>...]
__isnull
해당 필드에 유효한 값이 있는 모든 튜플들을 출력합니다.
In [11]: Product.objects.filter(name__isnull=False)
Out[11]: <QuerySet [<Product: Product object (1)>,
<Product: Product object (2)>,
<Product: Product object (3)>,
<Product: Product object (4)>,
<Product: Product object (5)>,
<Product: Product object (6)>,
<Product: Product object (7)>,
<Product: Product object (8)>]>
__in
필드 일치조건을 [List] 형식으로 입력합니다.
In [14]: Product.objects.filter(name__in=["육","얼"])
Out[14]: <QuerySet []>
In [15]: Product.objects.filter(name__in=["육개장","씨리얼"])
Out[15]: <QuerySet [<Product: Product object (3)>,
<Product: Product object (5)>]>
contains 처럼 포함되는것이 아니라 완전히 일치를 해야 검색이 됩니다.
참고자료
https://yongbeomkim.github.io/django/dj-filter-orm-basic/