我无法使用可浏览的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
答案 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
按钮。
fields
(MyFilter.Meta
),filter_class
,filter_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}
。不知道为什么会有效。