Django_rest-frameworkフィルタリング


文書ディレクトリ
  • 取付
  • 構成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