首页 > 解决方案 > 如何使用 django rest 框架搜索过滤器而不是对查询参数进行操作或操作

问题描述

这是我的代码。

class op_ViewSet(viewsets.ModelViewSet) :
    http_method_names = ['get']
    queryset = Op.objects.all().filter()
    serializer_class = op_Serializer
    pagination_class = MyPagination
    filter_backends = [DjangoFilterBackend , SearchFilter , OrderingFilter]
    filter_class = op_filter
    search_fields = ['website' , 'title' , 'description' , 'organization__name']

search_fields 在表的网站、标题、描述和组织列中搜索关键字。

这就是我发送邮递员请求的方式。

http://127.0.0.1:8000/?search=Belgian,Services

现在我的代码执行结束操作。它返回那些同时包含比利时语、服务关键字的行,而我希望它返回那些仅包含比利时语、仅服务或两者都包含在我在搜索字段中提供的 4 列中的行。

我怎样才能实现它?

非常感谢您的帮助。我在此处尝试了此输入链接描述,但对我不起作用

标签: pythondjango-modelsdjango-rest-frameworkdjango-viewsdjango-filter

解决方案


实际上,您需要某种“或”搜索过滤器(“它们都”包含在“任何领域的比利时人或任何领域的(xor ?)服务”中)。

您应该尝试此解决方案并稍作修改:

query = query | Q(website__contains=term) | Q(title__contains=term) | Q(description__contains=term) | Q(organization__name__contains=term)

推荐阅读