Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django Rest框架上使用普通过滤器和SearchFilter?_Python_Django_Rest_Filter_Django Rest Framework - Fatal编程技术网

Python 如何在Django Rest框架上使用普通过滤器和SearchFilter?

Python 如何在Django Rest框架上使用普通过滤器和SearchFilter?,python,django,rest,filter,django-rest-framework,Python,Django,Rest,Filter,Django Rest Framework,我正在使用DRF(Django Rest框架) 我声明了一个ModelViewSet,现在我想在此基础上添加过滤器 class GoodsViewSet(viewsets.ModelViewSet): class Filter(FilterSet): class Meta: model = m.Goods filter_class = Filter filter_backends = (SearchFilter, Filt

我正在使用DRF(Django Rest框架)

我声明了一个ModelViewSet,现在我想在此基础上添加过滤器

class GoodsViewSet(viewsets.ModelViewSet):
    class Filter(FilterSet):    
        class Meta:
            model = m.Goods

    filter_class = Filter
    filter_backends = (SearchFilter, Filter)
    search_fields = ['name',]
    queryset = m.Goods.objects.all()
    serializer_class = s.GoodsSerializer
看到我声明了一个过滤器子类并将其应用于:

filter_class = Filter
在我添加行之前,它在开始时起作用:

filter_backends = (SearchFilter, Filter)
search_fields = ['name',]
这是我的朋友告诉我的

现在,当跳过正常的
filter\u类
时,应用搜索过滤器

一句话,他们不能一起工作


如何解决这个问题?

最后,我发现我们应该同时指定两个
过滤器\u后端:

from rest_framework.filters import SearchFilter
from django_filters.rest_framework import DjangoFilterBackend

class GoodsViewSet(viewsets.ModelViewSet):
    class Filter(FilterSet):    
        class Meta:
            model = m.Goods

    filter_class = Filter
    filter_backends = (SearchFilter, DjangoFilterBackend)
    search_fields = ['name',]
    queryset = m.Goods.objects.all()
    serializer_class = s.GoodsSerializer
或者我们可以忽略特定
视图集
类上的
过滤器\u后端
字段,但在
设置中全局应用它们。py

REST_FRAMEWORK = {
    # ... other configurations
    'DEFAULT_FILTER_BACKENDS': (
        'rest_framework.filters.SearchFilter',
        'django_filters.rest_framework.DjangoFilterBackend',
    ),
}
这样,视图集上的
过滤器类
搜索字段
选项同时可用。

这对我很有用:

    from django_filters import rest_framework as filters
    from django_filters.rest_framework import DjangoFilterBackend
    from rest_framework.filters import SearchFilter, OrderingFilter
--------views.py-----------------------------

    filter_backends = (filters.DjangoFilterBackend, SearchFilter ,OrderingFilter)
    filter_fields =('completed',)
    ordering =('-date_created',)
    search_fields =('task_name',)

是否将过滤器类重命名为其他类名称?例如:过滤器类=我的自定义_Filter@soupboy谢谢,不是那个问题。我已经想出了一个解决方案,并作为答案发布。我只想把答案贴在这里。@AlfredHuang你有关于这个问题的博客吗?我希望看到全面实施。我还是很难弄明白。你的解决方案很有趣。