>source

django rest에서 작동하지 않는 범위 필터가 필터링되면 전혀 반응하지 않습니다.

전망

class MDShopListView(generics.ListAPIView):
        queryset = smartphone.objects.all()
        filter_backends = (DjangoFilterBackend,)
        filterset_class = ShoppFilter
        def get(self,request):
    
            queryset = self.get_queryset()
            serializer=MDShopListSerializer(queryset,many=True)
            
        
            return Response(serializer.data)
           

  • 답변 # 1

    쿼리 세트를 필터링해야합니다. self.filter_queryset(…) [drf-doc] :

    class MDShopListView(generics.ListAPIView):
        queryset = smartphone.objects.all()
        filter_backends = (DjangoFilterBackend,)
        filterset_class = ShoppFilter
        
        def get(self, request):
            queryset =self.filter_queryset(self.get_queryset())
            serializer=MDShopListSerializer(queryset,many=True)
            return Response(serializer.data)
    
    

    하지만 실제로 재정의 get(…) 이다아니지금부터 거의 정확히 무엇을 ListAPIView 페이지를 매기 지 않는 것을 제외하고는 기본적으로 수행됩니다. 사실, ListAPIView [GitHub]로 정의됩니다.

    class ListAPIView(mixins.ListModelMixin,
                      GenericAPIView):
        """
        Concrete view for listing a queryset.
        """
        def get(self, request, *args, **kwargs):
            return self.list(request, *args, **kwargs)
    
    

    그리고 .list(…) 방법은 ListModelMixin [GitHub] :

       def list(self, request, *args, **kwargs):
            queryset = self.filter_queryset(self.get_queryset())
            page = self.paginate_queryset(queryset)
            if page is not None:
                serializer = self.get_serializer(page, many=True)
                return self.get_paginated_response(serializer.data)
            serializer = self.get_serializer(queryset, many=True)
            return Response(serializer.data)
    
    

    따라서 이것을 다음과 같이 정의 할 수 있습니다.

    class MDShopListView(generics.ListAPIView):
        queryset = smartphone.objects.all()
        filter_backends = (DjangoFilterBackend,)
        filterset_class = ShoppFilter
        # specify the serializer ↓
       serializer_class = MDShopListSerializer
    
    

관련 자료

  • 이전 xmlstarlet을 사용하여 요소를 삭제하려고하지만 아무것도하지 않는 것 같습니다
  • 다음 javascript - BIP32 공개 키 내보내기 (Base64)