首页 > 解决方案 > 过滤器在 Django Rest 框架中不起作用

问题描述

我想过滤我的数据,就像假设我有一个模型 =>

我想要的是=>

我做了什么?

我安装了 django-filter 并添加了这个

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}

到setting.py,我这样测试,但是

为什么我得到我所有的记录? 甚至 URL 仅选择 userid = 1 api/user/?userid=1

如果我使用错误的 URL 参数进行测试,我得到了所有记录,甚至是错误的参数。

我对这个 => https://www.django-rest-framework.org/api-guide/filtering/#generic-filtering做同样的事情

更新

这是视图

class LeaveViewSet(viewsets.ModelViewSet):
    queryset = Leave.objects.all()
    serializer_class = LeaveSerializer

标签: djangofilterdjango-rest-frameworkdjango-filter

解决方案


您应该指定filterset_fields- (doc)属性

class LeaveViewSet(viewsets.ModelViewSet):
    queryset = Leave.objects.all()
    serializer_class = LeaveSerializer
    filterset_fields = ['user','other_fields']

由于您要查找嵌套关系,您可以将嵌套查找指定为

filterset_fields = ['user__id','user__username']

因此 URL 将变为 api/user/?user__id=1


推荐阅读