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 | |
| parent | 752c01420f7574cd99e28a17d56df711b675ce71 (diff) | |
| download | django-rest-framework-b2bf5f1f886d131957f99308a0da89b24b3352d4.tar.bz2 | |
SearchFilter may be comma and/or whitespace seperated
| -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)) |
