Django rest framework 无法在API视图上应用DjangoFilterBackend

Django rest framework 无法在API视图上应用DjangoFilterBackend,django-rest-framework,Django Rest Framework,我有两种型号User和Role用户型号有一个外键指向角色型号。我想根据用户的角色名列出用户,API应该能够搜索首名,“email”等字段,并进行分页 搜索应仅在筛选列表中。 URL应该是- {{dev}}/user/list?role_name=Merchant&search=Shobraj&page=2 因此,首先我安装了django filter包,然后在setting.py中添加了如下过滤器后端- REST_FRAMEWORK = { 'DEFAULT_FILTE

我有两种型号
User
Role
<代码>用户型号有一个
外键
指向
角色
型号。我想根据用户的
角色名
列出用户,API应该能够
搜索
首名
,“email”等字段,并进行
分页

搜索应仅在筛选列表中。

URL应该是-

{{dev}}/user/list?role_name=Merchant&search=Shobraj&page=2
因此,首先我安装了
django filter
包,然后在setting.py中添加了如下过滤器后端-

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend']
}
列表API视图-

class UsersListAPIView(ListAPIView):
 
    permission_classes = [IsAuthenticated & WhitelistAdmin]

    def get(self, request, formate=None):

        queryset = User.objects.all()
        serializer_class = ListUsersSerializers
        serialized_data = serializer_class(queryset, many=True)
        filter_backends = [DjangoFilterBackend]
        filterset_fields = ['role__role_name']
        print(queryset.query)

        return Response(serialized_data.data)
print(queryset.query)
返回此-

SELECT `user_authentication_user`.`id`, `user_authentication_user`.`last_login`, `user_authentication_user`.`is_superuser`, `user_authentication_user`.`first_name`, `user_authentication_user`.`last_name`, `user_authentication_user`.`email`, `user_authentication_user`.`phone_number`, `user_authentication_user`.`password`, `user_authentication_user`.`company_name`, `user_authentication_user`.`is_active`, `user_authentication_user`.`role_id`, `user_authentication_user`.`businesses_id`, `user_authentication_user`.`service_cities_id` FROM `user_authentication_user`
我不知道为什么,但是在
queryset
上没有应用过滤器

现有列表API视图返回列表而不进行筛选


如何使此API与
过滤器
分页
搜索
一起工作我不太确定,但您在序列化数据后设置了过滤器。在我看来,这是行不通的。您可以尝试将筛选器_后端和字段设置得更高,如下所示:

class UsersListAPIView(ListAPIView):

    permission_classes = [IsAuthenticated & WhitelistAdmin]
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['role__role_name']

    def get(self, request, formate=None):

    ...
这对你有用吗