Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django restframework搜索过滤器中禁用多个搜索_Python_Django_Search_Django Rest Framework - Fatal编程技术网

Python 在django restframework搜索过滤器中禁用多个搜索

Python 在django restframework搜索过滤器中禁用多个搜索,python,django,search,django-rest-framework,Python,Django,Search,Django Rest Framework,在Django rest框架中是否仍然可以使用SearchFilter禁用多个搜索 默认情况下,如果搜索字符串上出现空格和/或逗号,django rf将应用多个搜索 xyz.com/?搜索=x,y 此搜索将返回包含x或y(用逗号分隔)的结果 我想让它返回的结果包含“x,y”作为字符串的一部分。很难找到一个好的参数和用例,但既然您想实现这样的搜索,就必须使用它。 我将对现有的SearchFilter进行子类化,并覆盖filter\u queryset方法: def filter_queryset

在Django rest框架中是否仍然可以使用SearchFilter禁用多个搜索

默认情况下,如果搜索字符串上出现空格和/或逗号,django rf将应用多个搜索

xyz.com/?搜索=x,y

此搜索将返回包含x或y(用逗号分隔)的结果


我想让它返回的结果包含“x,y”作为字符串的一部分。

很难找到一个好的参数和用例,但既然您想实现这样的搜索,就必须使用它。 我将对现有的
SearchFilter
进行子类化,并覆盖
filter\u queryset
方法:

 def filter_queryset(self, request, queryset, view):
    search_fields = getattr(view, 'search_fields', None)
    search_terms = self.get_search_terms(request)

    if not search_fields or not search_terms:
        return queryset

    orm_lookups = [
        self.construct_search(six.text_type(search_field))
        for search_field in search_fields
    ]

    base = queryset
    conditions = []
    for search_term in search_terms:
        queries = [
            models.Q(**{orm_lookup: search_term})
            for orm_lookup in orm_lookups
        ]
        conditions.append(reduce(operator.or_, queries))
    queryset = queryset.filter(reduce(operator.and_, conditions))

    if self.must_call_distinct(queryset, search_fields):
        # Filtering against a many-to-many field requires us to
        # call queryset.distinct() in order to avoid duplicate items
        # in the resulting queryset.
        # We try to avoid this if possible, for performance reasons.
        queryset = distinct(queryset, base)
    return queryset
这就是该方法的外观。只要看一眼,你就会明白这句话:
conditions.append(reduce(operator.or,查询))

您可以将其更改为:
conditions.append(reduce(操作符和查询))


这可能会返回您的预期结果

对于完整单词匹配筛选器,有一个可用的。