Skip to content

Commit 4f7e9ed

Browse files
drewg3rAndrii Tarasenko
andauthored
Fix SearchFilter renders field with invalid value (#9023)
Co-authored-by: Andrii Tarasenko <andrii.tarasenko@py-t.com>
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy