Django rest框架用于POST请求的定制过滤器

2024-04-19 16:41:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在过滤器.py,我定义了一个CustomFilter,它具有ComboSortFilterIntegerListFilter类型的值。在

在视图.py,我定义了一个包含filter_class = CustomFilter的视图集,这对于使用url中的查询字符串参数的GET请求非常有用,这些请求使用自定义筛选进行处理。在

我还需要支持POST请求,因为有些筛选条件太长,无法放入URL中。在

所以我在视图集中添加了一个post方法,从request.DATA中提取参数,然后过滤、序列化和分页。。。在

在我的ViewSet的post方法中视图.py公司名称:

queryset = MyModel.objects.filter(**filter_args)
page = self.paginate_queryset(queryset)
serializer = self.get_pagination_serializer(page)
return Response(serializer.data)

对于简单的过滤,上面的工作很好。但是,我在我的CustomFilter中定义的过滤使用ComboSortFilterIntegerListFilter来过滤字段,这有点复杂:

在过滤器.py公司名称:

^{pr2}$

有没有办法从ViewSet的post方法中引用CustomFilterFilterSet或我的两个自定义过滤器中的任何一个?我不想在views.py中复制所有这些过滤代码才能使其工作。在

关于Django-rest-framework:filters的所有文档都只包含一些简单的示例,要么在视图中滚动,要么使用过滤器类。有没有一种方法可以直接从视图调用过滤器类,重写它通常从查询字符串中获取的值?在


Tags: 方法字符串py视图过滤器参数定义filter
1条回答
网友
1楼 · 发布于 2024-04-19 16:41:05

弄明白了:

class MyPostViewSet(BaseModelViewSet):

    def post(self, request, *args, **kwargs):
        queryset = self.queryset
        filter_params = request.DATA or request.GET
        if filter_params:
            queryfilter = self.filter_class(filter_params, queryset=queryset)
            queryset = queryfilter.qs
        page = self.paginate_queryset(queryset)
        serializer = self.get_pagination_serializer(page)
        return Response(serializer.data)

相关问题 更多 >