如何在 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)
阿卜杜勒·阿齐兹·巴尔卡特

而不是使用APIView您应该使用GenericAPIViewDRF 文档,那么您可以简单地使用filter_queryset视图方法,该方法将使用指定的filter_backends来过滤查询集。要分页,您可以使用该paginate_queryset方法并get_paginated_response返回分页响应:

from rest_framework.generics import GenericAPIView


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

    def get(self, request, format=None):
        query = self.filter_queryset(Discussion.objects.all()) # Here
        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 = 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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在DRF中使用Django过滤器

如何在Django过滤器中使用AND?

如何在Angular 2的组件中使用过滤器(管道)(不是在使用管道的DOM中)

APIView上的Django过滤器

使用Django过滤器搜索

如何在ListAPIView中使用django-filter进行过滤的结果排序

如何在表格中使用angularjs搜索过滤器

如何在Django的Count Q中使用过滤器

如何在for中应用“过滤器过滤器”,而不是在Twig中使用“ if”

Django过滤器,如何使多个字段搜索?(使用django-filter!)

Django DRF-使用基本搜索过滤器进行多重或搜索

如何在Django过滤器查询中使用大于和小于或等于

如何在generics.ListAPIView中编写功能,可以在Django DRF中的APIView中编写

Django的。如何在include with子句中使用过滤器

如何在for循环中使用Django模板过滤器?

如何在Django中使用切片过滤器?

如何在Microsoft Exchange Web服务(EWS)中使用搜索过滤器和视图库

在Django过滤器中使用dateadd

如何在LinkEntity中使用条件和过滤器?

如何在 django-rest-framework 中使用相同的 url conf 调用 CreateApiView 和 ListApiView?

如何在用户输入中使用 Django 过滤器的排除参数?

如何使用 Swift 过滤器根据搜索键对嵌套数组进行过滤

如何在 Django 中使用模板过滤器访问反向外键单字段的总和?

我如何使用过滤器而不是 forEach(Javascript)

如何在 Django ORM 的过滤器中使用变量列名?

如何更改 Django 管理过滤器以使用下拉列表而不是也可以搜索的列表?

使用过滤器和映射而不是过滤器和循环的更智能方式

在 Django Rest Framework 中使用类 APIView 进行分页

如何使用 Django Rest Framework ListAPIView 包含相关模型