Added 'operator' to the API

This commit is contained in:
Michael Fillier 2015-12-10 10:30:42 +00:00 committed by Karl Hobley
parent b4e6229b37
commit b391cbfd62
3 changed files with 19 additions and 1 deletions

View file

@ -45,6 +45,7 @@ class BaseAPIEndpoint(GenericViewSet):
'fields',
'order',
'search',
'search_operator',
# Used by jQuery for cache-busting. See #1671
'_',

View file

@ -101,9 +101,10 @@ class SearchFilter(BaseFilterBackend):
raise BadRequestError("filtering by tag with a search query is not supported")
search_query = request.GET['search']
search_operator = request.GET.get('search_operator', None)
sb = get_search_backend()
queryset = sb.search(search_query, queryset)
queryset = sb.search(search_query, queryset, operator=search_operator)
return queryset

View file

@ -552,6 +552,22 @@ class TestPageListing(TestCase):
self.assertEqual(response.status_code, 400)
self.assertEqual(content, {'message': "filtering by tag with a search query is not supported"})
def test_search_operator_and(self):
response = self.get_response(type='demosite.BlogEntryPage', search='blog again', search_operator='and')
content = json.loads(response.content.decode('UTF-8'))
page_id_list = self.get_page_id_list(content)
self.assertEqual(set(page_id_list), set([18]))
def test_search_operator_or(self):
response = self.get_response(type='demosite.BlogEntryPage', search='blog again', search_operator='or')
content = json.loads(response.content.decode('UTF-8'))
page_id_list = self.get_page_id_list(content)
self.assertEqual(set(page_id_list), set([16, 18, 19]))
class TestPageDetail(TestCase):
fixtures = ['demosite.json']