Django休息框架可浏览的API过滤后端没有显示

时间:2016-11-09 03:36:30

标签: python django django-rest-framework django-filter

我无法使用可浏览的API来显示"过滤器"配置django以使用过滤后端后的按钮。

根据documentation,我需要做的就是将以下几行代码添加到网站的<div id="search_box"> <img src="images/background_search.jpg" alt="search_box_picture"/> <h1>SOME TEXT</h1> </div> 文件中,过滤器应自动放在可浏览的API中。的网络界面,我只是没有在那里看到它。我尝试重新启动网络服务器(我正在使用settings.py)并且没有帮助。

修改

我知道还有另一个选项可以在视图的基础上启用过滤器,但我想让它们适用于所有视图。

根据documentation,它应该足以只做其中一个:

  

可以使用./manage runserver设置全局设置默认过滤器后端。

或以下:

  

您还可以基于每个视图或每个视图集设置过滤器后端

来自settings.py:

DEFAULT_FILTER_BACKENDS

以下REST_FRAMEWORK = { <snip> 'DEFAULT_FILTER_BACKENDS': ( 'django_filters.rest_framework.DjangoFilterBackend', ), 的内容:

pip freeze

2 个答案:

答案 0 :(得分:2)

您是否在filter_fields上指定了ViewSet或设置了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

答案 1 :(得分:0)

我遇到过类似的问题 - 浏览API视图中缺少Filers按钮。

fieldsMyFilter.Meta),filter_classfilter_backends已全部设定。奇怪的是Filers按钮出现在其他视图上。

class MyViewSet(viewsets.ViewSetMixin, generics.ListAPIView):
    filter_class = MyFilter
    filter_backends = (OrderingFilter, DjangoFilterBackend)
    ...

    def list(self, request):
        data = {'foo': 'bar'}
        return Response(data)

当我将'results'放到返回的JSON,e.i时,问题就消失了。 data = {'foo': 'bar', 'results': None}。不知道为什么会有效。