Fix SearchFilter renders field with invalid value

This commit is contained in:
Andrii Tarasenko 2023-06-27 09:08:02 +02:00
parent 8dd4250d02
commit 0b738cbfec
2 changed files with 18 additions and 3 deletions

View File

@ -139,11 +139,9 @@ class SearchFilter(BaseFilterBackend):
if not getattr(view, 'search_fields', None): if not getattr(view, 'search_fields', None):
return '' return ''
term = self.get_search_terms(request)
term = term[0] if term else ''
context = { context = {
'param': self.search_param, 'param': self.search_param,
'term': term 'term': request.query_params.get(self.search_param, ''),
} }
template = loader.get_template(self.template) template = loader.get_template(self.template)
return template.render(context) return template.render(context)

View File

@ -225,6 +225,23 @@ class SearchFilterTests(TestCase):
{'id': 2, 'title': 'zz', 'text': 'bcd'}, {'id': 2, 'title': 'zz', 'text': 'bcd'},
] ]
def test_search_field_with_multiple_words(self):
class SearchListView(generics.ListAPIView):
queryset = SearchFilterModel.objects.all()
serializer_class = SearchFilterSerializer
filter_backends = (filters.SearchFilter,)
search_fields = ('title', 'text')
search_query = 'foo bar,baz'
view = SearchListView()
request = factory.get('/', {'search': search_query})
request = view.initialize_request(request)
rendered_search_field = filters.SearchFilter().to_html(
request=request, queryset=view.queryset, view=view
)
assert search_query in rendered_search_field
class AttributeModel(models.Model): class AttributeModel(models.Model):
label = models.CharField(max_length=32) label = models.CharField(max_length=32)