首页 > 解决方案 > 如何在 APIView 而不是 ListAPIView 中使用 django 过滤器进行过滤和搜索?

问题描述

下面给出的是用 ListAPIview 编写的代码,现在我必须将其更改为 APIView。我怎样才能在其中进行搜索、过滤和排序?如果需要更多详细信息,请在评论中告诉我。提前致谢。

class DiscussionView(APIView):
    pagination_class = DiscussionPagination
    filter_backends = [OrderingFilter, SearchFilter]
    search_fields = ['title']
    ordering_fields = ['id']

def get(self, request, format=None):
    query = Discussion.objects.all()
    serializer = DiscussionSerializer(query, many=True)
    return Response(serializer.data)

def post(self, request, format=None):
    serializer = DiscussionSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

标签: pythondjangodjango-rest-framework

解决方案


filter您可以分别使用和添加自定义过滤和排序order_by

    def get(self, request, format=None):
        query = Discussion.objects.all().order_by('id')
        title = request.query_params.get('title')
        if title is not None:
            query = query.filter(title=title)
        serializer = DiscussionSerializer(query, many=True)
        return Response(serializer.data)

参考:https ://www.django-rest-framework.org/api-guide/filtering/#filtering-against-query-parameters


推荐阅读