Skip to content

Commit 4f7e9ed

Browse files
drewg3rAndrii Tarasenko
andauthored
Fix SearchFilter renders field with invalid value (#9023)
Co-authored-by: Andrii Tarasenko <[email protected]>
1 parent 8dd4250 commit 4f7e9ed

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

rest_framework/filters.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,9 @@ def to_html(self, request, queryset, view):
139139
if not getattr(view, 'search_fields', None):
140140
return ''
141141

142-
term = self.get_search_terms(request)
143-
term = term[0] if term else ''
144142
context = {
145143
'param': self.search_param,
146-
'term': term
144+
'term': request.query_params.get(self.search_param, ''),
147145
}
148146
template = loader.get_template(self.template)
149147
return template.render(context)

tests/test_filters.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,23 @@ def as_sql(self, compiler, connection):
225225
{'id': 2, 'title': 'zz', 'text': 'bcd'},
226226
]
227227

228+
def test_search_field_with_multiple_words(self):
229+
class SearchListView(generics.ListAPIView):
230+
queryset = SearchFilterModel.objects.all()
231+
serializer_class = SearchFilterSerializer
232+
filter_backends = (filters.SearchFilter,)
233+
search_fields = ('title', 'text')
234+
235+
search_query = 'foo bar,baz'
236+
view = SearchListView()
237+
request = factory.get('/', {'search': search_query})
238+
request = view.initialize_request(request)
239+
240+
rendered_search_field = filters.SearchFilter().to_html(
241+
request=request, queryset=view.queryset, view=view
242+
)
243+
assert search_query in rendered_search_field
244+
228245

229246
class AttributeModel(models.Model):
230247
label = models.CharField(max_length=32)

0 commit comments

Comments
 (0)