diff options
| author | Tom Christie | 2013-05-14 10:10:44 +0100 | 
|---|---|---|
| committer | Tom Christie | 2013-05-14 10:10:44 +0100 | 
| commit | b2bf5f1f886d131957f99308a0da89b24b3352d4 (patch) | |
| tree | f354cc797cd9b844d9d8525685e94bf54dbc4b12 /rest_framework | |
| parent | 752c01420f7574cd99e28a17d56df711b675ce71 (diff) | |
| download | django-rest-framework-b2bf5f1f886d131957f99308a0da89b24b3352d4.tar.bz2 | |
SearchFilter may be comma and/or whitespace seperated
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/filters.py | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/rest_framework/filters.py b/rest_framework/filters.py index 57f0f7c8..c496ec4b 100644 --- a/rest_framework/filters.py +++ b/rest_framework/filters.py @@ -75,7 +75,14 @@ class DjangoFilterBackend(BaseFilterBackend):  class SearchFilter(BaseFilterBackend):      search_param = 'search'  # The URL query parameter used for the search. -    delimiter = None  # For example, set to ',' for comma delimited searchs. + +    def get_search_terms(self, request): +        """ +        Search terms are set by a ?search=... query parameter, +        and may be comma and/or whitespace delimited. +        """ +        params = request.QUERY_PARAMS.get(self.search_param) +        return params.replace(',', ' ').split()      def construct_search(self, field_name):          if field_name.startswith('^'): @@ -93,11 +100,10 @@ class SearchFilter(BaseFilterBackend):          if not search_fields:              return None -        search_terms = request.QUERY_PARAMS.get(self.search_param)          orm_lookups = [self.construct_search(str(search_field))                         for search_field in search_fields] -        for search_term in search_terms.split(self.delimiter): +        for search_term in self.get_search_terms(request):              or_queries = [models.Q(**{orm_lookup: search_term})                            for orm_lookup in orm_lookups]              queryset = queryset.filter(reduce(operator.or_, or_queries))  | 
