일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- django rest framework
- AWS
- DRF
- es6
- Algorithm
- PYTHON
- 백준
- 알고리즘 연습
- c++
- Git
- Django
- java
- form
- 장고
- HTML
- CSS
- javascript
- 파이썬
- django ORM
- MAC
- js
- 알고리즘 문제
- 파이썬 알고리즘
- django widget
- 알고리즘 풀이
- react
- Baekjoon
- API
- web
- 알고리즘
Archives
- Today
- Total
수학과의 좌충우돌 프로그래밍
[Django] filtering 과 Search 본문
목록을 조회하는 ListAPIVIew 에서 필터링하는 방법에 대해서 알아보도록 하겠습니다.
이는 CBV 의 일종이기 때문에 CBV와 익숙하시다면 쉽게 하실 수 있을 겁니다.
여러 인자 획득
filtering 을 하는데 필요한 인자들을 request 를 통해서 획득할 수 있습니다.
-
self.request.user
- 현재 로그인 중인 유저에 접근할 수 있습니다.
- 로그인이 안 되어 있을 시에는 AnnoymousUser 인스턴스를 획득합니다.
-
self.request.GET
- 요청한 get 인자들을 획득합니다.
-
self.request.query_params
self.request.GET
와 같은 값을 얻습니다.- 보다 더 가독성이 높기 때문에 DRF 에서 지원하고 있습니다.
-
self.kwargs
-
URL Capture 된 인자를 획득합니다.
urlpatterns = [ path('post/', views.PostListAPIView.as_view()), path('post/<int:pk>/',views.PostDetailAPIView.as_view()), ]
다음과 같이 URL 이 정의되어있는 경우에
localhost:8000/post/1/
다음 url로 접근 시 다음과 같은 값을 획득할 수 있습니다. 이는 python dictionary 로서 key 값으로 value 값에 접근이 가능합니다.self.kwargs # {'pk': '1'}
-
get_queryset
get_queryset
인자를 커스튬해서 상황에 따라 filtering을 할 수 있습니다.
# views.py
from rest_framework.viewsets import ModelViewSet
from .models import Post
from .serializers import PostSerializer
class PostViewSet(ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
def get_queryset(self):
qs = super().get_queryset()
qs = qs.filter(author=1)
return qs
위의 경우, author가 1인 경우만 filtering되어 나타나게 됩니다.
Search
admin 페이지를 커스튬하다보면 search 기능을 추가할 수 있습니다.
이 처럼 RDF 에서도 search 를 추가할 수 있습니다.
# views.py
from rest_framework.viewsets import ModelViewSet
from rest_framework.filters import SearchFilter
from .models import Post
from .serializers import PostSerializer
class PostViewSet(ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
filter_backends = [SearchFilter]
search_fields = ['title']
DBMS 의 LIKE/ILIKE 조건절을 통해 검색을 하게 되며, 아래의 이미지와 같이 검색을 할 수 있습니다.
'웹프로그래밍 > DRF' 카테고리의 다른 글
[Django] Serializer 를 통한 유효성 검사 및 저장 (2) | 2019.12.30 |
---|---|
[Django] DRF Pagination (6) | 2019.12.30 |
[Django] format 과 Renderer (0) | 2019.12.29 |
[Django] ViewSet 과 Router (9) | 2019.12.28 |
[Django] APIView, Mixins, generics APIView, ViewSet을 알아보자 (15) | 2019.12.27 |
Comments