Skip to main content
 首页 » 编程设计

python之Django 休息框架可浏览的 API 过滤器后端不显示

2024年10月17日35pander-it

在将 django 配置为使用过滤后端后,我无法让可浏览的 API 显示“过滤器”按钮。

根据documentation我需要做的就是将以下几行代码添加到站点的 settings.py 文件中,过滤器应该会自动出现在可浏览 API 的网络界面中,但我在那里看不到它。我尝试重新启动网络服务器(我正在使用 ./manage runserver)但没有帮助。

编辑:

我知道还有另一种选项可以根据 View 打开过滤器,但我想为所有 View 启用它们。

根据 documentation , 只做其中一个应该就足够了:

The default filter backends may be set globally, using the DEFAULT_FILTER_BACKENDS setting.

或以下:

You can also set the filter backends on a per-view, or per-viewset basis

来自 settings.py:

REST_FRAMEWORK = { 
 
  <snip> 
 
  'DEFAULT_FILTER_BACKENDS': ( 
    'django_filters.rest_framework.DjangoFilterBackend', 
  ), 

pip freeze 的内容如下:

(venv) mba15:server nir$  pip freeze | grep django 
django-allauth==0.28.0 
django-celery==3.1.17 
django-filter==0.15.3 
django-registration-redux==1.4 
django-rest-auth==0.8.2 
djangorestframework==3.5.3 

请您参考如下方法:

您是否在 ViewSet 上指定了 filter_fields 或设置了 filter_class?

class ArticleViewSet(ModelViewSet): 
    serializer_class = ArticleSerializer 
    queryset = Article.objects.all() 
    filter_fields = ('category', ) 

或

class ArticleFilterSet(FilterSet): 
    class Meta: 
        model = Article 
        fields = ('category', ) 
 
 
class ArticleViewSet(ModelViewSet): 
    serializer_class = ArticleSerializer 
    queryset = Article.objects.all() 
    filter_class = ArticleFilterSet