How to make an app that Django Rest Framework Filter and Django-Filter with ModelViewSet

问题描述 投票:0回答:0

当我使用泛型 ListAPIView 过滤器和订单离开时,它正在工作,但如果我使用 ModelViewSet,它就不起作用。我添加了我的代码示例。我该如何解决这个问题?提前致谢

class MovieViewSet(generics.ListAPIView):
    queryset = Movie.objects.all().order_by('movie_id')
    serializer_class = serializers.MovieDetailSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    authentication_classes = [authentication.BasicAuthentication]

    # FILTER AND ORDER:
    filter_backends = [django_filters.DjangoFilterBackend, filters.OrderingFilter, filters.SearchFilter]
    filterset_fields = ['category', 'director', 'country']
    search_fields = ['category__name', 'director__name', 'name']
    ordering_fields = ['production_year', 'imdb', 'duration']

它正在工作!

class MovieViewSet(viewsets.ModelViewSet):
    queryset = Movie.objects.all().order_by('movie_id')
    serializer_class = serializers.MovieDetailSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    authentication_classes = [authentication.BasicAuthentication]

    # FILTER AND ORDER:
    filter_backends = [django_filters.DjangoFilterBackend, filters.OrderingFilter, filters.SearchFilter]
    filterset_fields = ['category', 'director', 'country']
    search_fields = ['category__name', 'director__name', 'name']
    ordering_fields = ['production_year', 'imdb', 'duration']

    def list(self, request, **kwargs):
        queryset = Movie.objects.all().order_by('name')
        serializer = MovieSerializer(queryset, many=True)
        return Response(serializer.data)

    def retrieve(self, request, pk):
        queryset = Movie.objects.all()
        movie = get_object_or_404(queryset, pk=pk)
        serializer = serializers.MovieDetailSerializer(movie)
        return Response(serializer.data)

    def has_permission(self, request, **kwargs):
        if request.METHOD in permissions.SAFE_METHODS:
            return True
        else:
            return request.user.is_staff()

它不工作!!

python django django-rest-framework django-generic-views django-filters
© www.soinside.com 2019 - 2024. All rights reserved.