Fix SearchFilter renders field with invalid value (#9023)

Co-authored-by: Andrii Tarasenko <andrii.tarasenko@py-t.com>
This commit is contained in:
Andrew 2023-07-02 09:57:20 +02:00 committed by GitHub
parent 8dd4250d02
commit 4f7e9ed3bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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):
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)

View File

@ -225,6 +225,23 @@ class SearchFilterTests(TestCase):
{'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)