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):
...
这对你有用吗