Django_rest-frameworkフィルタリング
文書ディレクトリ取付 構成sttings カスタムフィルタクラス フィルタフィールドおよびフィルタクラス を指定する.
インストール
sttingsの構成
カスタムフィルタクラス
フィルタフィールドとフィルタクラスの指定
インストール
pip insall django-filter
sttingsの構成
INSTALLED_APPS = [
...
'django_filters', # ,
]
REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS':
('django_filters.rest_framework.DjangoFilterBackend',)
}
カスタムフィルタクラス
from django_filters import rest_framework as filters
from App.models import Bookinfo
class BookFilter(filters.FilterSet):
#
# field_name
# method
# http://127.0.0.1:9090/list/?comment=50
comment = filters.NumberFilter(field_name='bcomment', method='find_comment')
class Meta:
model = Bookinfo
fields = {
# ORM
#http://127.0.0.1:9008/list/?btitle__icontains=%E5%85%AB
'btitle':['icontains','startswith','iendswith'], #
# http://127.0.0.1:9008/list/?bread__gt=10&bread__lt=50
'bread':['exact','lt','gt','lte','in'],
}
def find_comment(self,queryset,name,value):
"""
:param queryset:
:param name:
:param value:
:return: queryset( queryset)
"""
print(name,value)
return queryset.filter(bcomment__lt=value)
フィルタフィールドとフィルタクラスの指定
class BooksView(ListAPIView):
"""
"""
queryset = Bookinfo.objects.all()
serializer_class = BookinfoSerializer
#
filter_fields = ('btitle','bread')
#
filter_class = BookFilter