파이썬 Django QuerySet filter
filter() 메서드는 검색을 필터링하는 데 사용되며 검색어와 일치하는 행만 반환할 수 있다.
이전 장에서 배운 것처럼 필드 이름을 다음과 같이 필터링할 수 있다:
이름이 'Emil'인 레코드만 반환한다:
template.html <!DOCTYPE html> <html> <body> <p>The queryset object:</p> {{ mymembers }} <p>Loop through the items:</p> <table border='1'> <tr> <th>ID</th> <th>Firstname</th> <th>Lastname</th> </tr> {% for x in mymembers %} <tr> <td>{{ x.id }}</td> <td>{{ x.firstname }}</td> <td>{{ x.lastname }}</td> </tr> {% endfor %} </table> </body> </html> |
views.py from django.http import HttpResponse from django.template import loader from .models import Member def testing(request): mydata = Member.objects.filter(firstname='Emil').values() template = loader.get_template('template.html') context = { 'mymembers': mydata, } return HttpResponse(template.render(context, request)) # Check out template.html to see how the mymembers object # was used in the HTML code. |
위의 코드를 실행하면 아래 그림과 같다.

SQL에서 위의 문장은 다음과 같이 적는다:
SELECT * FROM members WHERE firstname = 'Emil'; |
파이썬 Django QuerySet filter and
filter() 메서드는 인수를 **kwargs(키워드 인수)로 사용하므로 둘 이상의 필드를 쉼표로 구분하여 필터링할 수 있다.
firstname이 "Refsnes"이고 ID가 2인 레코드를 반환한다:
template.html <!DOCTYPE html> <html> <body> <p>The queryset object:</p> {{ mymembers }} <p>Loop through the items:</p> <table border='1'> <tr> <th>ID</th> <th>Firstname</th> <th>Lastname</th> </tr> {% for x in mymembers %} <tr> <td>{{ x.id }}</td> <td>{{ x.firstname }}</td> <td>{{ x.lastname }}</td> </tr> {% endfor %} </table> </body> </html> |
views.py from django.http import HttpResponse from django.template import loader from .models import Member def testing(request): mydata = Member.objects.filter(lastname='Refsnes', id=2).values() template = loader.get_template('template.html') context = { 'mymembers': mydata, } return HttpResponse(template.render(context, request)) # Check out template.html to see how the mymembers object # was used in the HTML code. |
위의 코드를 실행하면 아래 그림과 같다.

SQL에서 위의 문장은 다음과 같이 적는다:
SELECT * FROM members WHERE lastname = 'Refsnes' AND id = 2; |
파이썬 Django QuerySet filter or
이름이 Emil이거나 이름이 Tobias인 레코드를 반환하는 것은 위의 AND 예제처럼 쉽지 않다.
파이프 | 문자로 구분된 여러 필터() 메서드를 사용할 수 있다. 결과는 하나의 모델로 병합된다.
이름이 "Emil" 또는 "Tobias"인 경우 레코드를 반환한다:
template.html <!DOCTYPE html> <html> <body> <p>The queryset object:</p> {{ mymembers }} <p>Loop through the items:</p> <table border='1'> <tr> <th>ID</th> <th>Firstname</th> <th>Lastname</th> </tr> {% for x in mymembers %} <tr> <td>{{ x.id }}</td> <td>{{ x.firstname }}</td> <td>{{ x.lastname }}</td> </tr> {% endfor %} </table> </body> </html> |
views.py from django.http import HttpResponse from django.template import loader from .models import Member def testing(request): mydata = Member.objects.filter(firstname='Emil').values() | Member.objects.filter(firstname='Tobias').values() template = loader.get_template('template.html') context = { 'mymembers': mydata, } return HttpResponse(template.render(context, request)) # Check out template.html to see how the mymembers object # was used in the HTML code. |
위의 코드를 실행하면 아래 그림과 같다.
또 다른 일반적인 방법은 Q 식을 가져와 사용하는 것이다:
이름이 "Emil" 또는 "Tobias"인 경우 레코드를 반환한다:
template.html <!DOCTYPE html> <html> <body> <p>The queryset object:</p> {{ mymembers }} <p>Loop through the items:</p> <table border='1'> <tr> <th>ID</th> <th>Firstname</th> <th>Lastname</th> </tr> {% for x in mymembers %} <tr> <td>{{ x.id }}</td> <td>{{ x.firstname }}</td> <td>{{ x.lastname }}</td> </tr> {% endfor %} </table> </body> </html> |
views.py from django.http import HttpResponse from django.template import loader from .models import Member from django.db.models import Q def testing(request): mydata = Member.objects.filter(Q(firstname='Emil') | Q(firstname='Tobias')).values() template = loader.get_template('template.html') context = { 'mymembers': mydata, } return HttpResponse(template.render(context, request)) # Check out template.html to see how the mymembers object # was used in the HTML code. |
위의 코드를 실행하면 아래 그림과 같다.

SQL에서 위의 문장은 다음과 같이 적는다:
SELECT * FROM members WHERE firstname = 'Emil' OR firstname = 'Tobias'; |
파이썬 Django QuerySet 필드 조회(Field Lookup) : __startswitch
Django는 SQL 문과 WHERE 절을 지정하는 고유한 방법이 있다.
Django의 절 위치를 구체적으로 알려면 "Field lookup"을 사용한다.
필드 룩업은 특정 SQL 키워드를 나타내는 키워드이다.
키워드로 __startswitch를 사용한다:
.filter(firstname__startswith='L'); |
SQL 문은 아래와 같다.:
WHERE firstname LIKE 'L%' |
위 문은 이름이 'L'로 시작하는 레코드를 반환한다.
파이썬 Django QuerySet 필드 조회 구문(Filed Lookup syntax)
모든 필드 룩업 키워드는 필드 이름, 두 개(!)의 밑줄 문자 및 키워드를 사용하여 지정해야 한다.
당사의 member 모델에서 진술은 다음과 같이 작성된다:
이름이 'L'자로 시작하는 레코드를 반환한다:
template.html <!DOCTYPE html> <html> <body> <p>The queryset object:</p> {{ mymembers }} <p>Loop through the items:</p> <table border='1'> <tr> <th>ID</th> <th>Firstname</th> <th>Lastname</th> </tr> {% for x in mymembers %} <tr> <td>{{ x.id }}</td> <td>{{ x.firstname }}</td> <td>{{ x.lastname }}</td> </tr> {% endfor %} </table> </body> </html> |
views.py from django.http import HttpResponse from django.template import loader from .models import Member def testing(request): mydata = Member.objects.filter(firstname__startswith='L').values() template = loader.get_template('template.html') context = { 'mymembers': mydata, } return HttpResponse(template.render(context, request)) # Check out template.html to see how the mymembers object # was used in the HTML code. |
위의 코드를 실행하면 아래 그림과 같다.

파이썬 Django QuerySet 필드 조회 참조
키워드 | 설명 |
contains | 문구를 포함합니다 |
icontains | 포함된 것과 동일하지만 대소문자 구분 없음 |
date | 날짜와 일치합니다 |
day | 날짜(월요일, 1-31)와 일치합니다(날짜의 경우) |
endswith | 끝은 다음과 같습니다 |
iendswith | 끝은 동일하지만 대소문자 구분 없음 |
exact | 정확한 일치 |
iexact | 정확하지만 대소문자 구분이 없습니다 |
in | 값 중 하나와 일치합니다 |
isnull | NULL 값과 일치합니다 |
gt | 보다 큼 |
gte | 보다 크거나 같다. |
hour | 시간(날짜 시간)과 일치합니다 |
lt | 보다 작음 |
lte | 보다 작거나 같다. |
minute | 분(날짜 시간)과 일치합니다 |
month | 달(날짜의 경우)과 일치합니다 |
quarter | 1년 중 4분의 1(1-4일)과 일치합니다(날짜의 경우) |
range | 사이의 일치 |
regex | 정규식과 일치합니다 |
iregex | regex와 동일하지만 대소문자 구분 없음 |
second | 초(데이트 시간)와 일치합니다 |
startswith | 시작과 일치하는지 |
istartswith | 처음과 동일하지만 대/소문자 구분 없음 |
time | 시간(날짜 시간)과 일치합니다 |
week | 주 번호(1-53)와 일치합니다(날짜의 경우) |
week_day | 일치하는 요일(1-7) 1은 일요일입니다 |
iso_week_day | ISO 8601 요일(1-7) 1이 월요일과 일치합니다 |
year | 년 일치(날짜의 경우) |
iso_year | ISO 8601년(날짜의 경우)과 일치합니다 |
이번 글에서는 파이썬 Django QuerySet filter와 관련해서 살펴보았다.
파이썬 Django QuerySet filter() 메소드에 다양한 옵션으로 and, or, 필드 조회로 __startswith 키워드 등에 대해서 실습하였다.
꼭 손으로 눈으로 머리로 익히며 실습하기를 바란다.
모두 화이팅입니다.!!!
출처 : 이 글의 출처는 w3schools사이트를 참고하였으며 필자가 추가하여 정리한 글입니다.
'파이썬 > 파이썬기본문법' 카테고리의 다른 글
파이썬 Django Static Files 추가 (0) | 2024.03.14 |
---|---|
파이썬 Django QuerySet - order_by() (0) | 2024.03.13 |
파이썬 Django QuerySet : Get Data (0) | 2024.03.11 |
파이썬 Django QuerySet (0) | 2024.03.10 |
파이썬 Django include 태그 (0) | 2024.03.09 |
댓글