Skip to content

Commit

Permalink
Fix SearchFilter renders field with invalid value (#9023)
Browse files Browse the repository at this point in the history
Co-authored-by: Andrii Tarasenko <andrii.tarasenko@py-t.com>
  • Loading branch information
drewg3r and Andrii Tarasenko authored Jul 2, 2023
1 parent 8dd4250 commit 4f7e9ed
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 3 deletions.
4 changes: 1 addition & 3 deletions rest_framework/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,11 +139,9 @@ def to_html(self, request, queryset, view):
if not getattr(view, 'search_fields', None):
return ''

term = self.get_search_terms(request)
term = term[0] if term else ''
context = {
'param': self.search_param,
'term': term
'term': request.query_params.get(self.search_param, ''),
}
template = loader.get_template(self.template)
return template.render(context)
Expand Down
17 changes: 17 additions & 0 deletions tests/test_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,23 @@ def as_sql(self, compiler, connection):
{'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):
label = models.CharField(max_length=32)
Expand Down

0 comments on commit 4f7e9ed

Please sign in to comment.