当我使用泛型 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()
它不工作!!