3.15 backward compatibility issue with 3.14 - rest_framework.filters.SearchFilter.get_search_terms
returns str
instead of list
#9308
Labels
Discussed in #9307
Originally posted by freenoth March 19, 2024
![image](https://private-user-images.githubusercontent.com/2629328/314006532-05f7b36c-1d06-461e-b7e6-5737b7c03e93.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5NjkxOTAsIm5iZiI6MTczODk2ODg5MCwicGF0aCI6Ii8yNjI5MzI4LzMxNDAwNjUzMi0wNWY3YjM2Yy0xZDA2LTQ2MWUtYjdlNi01NzM3YjdjMDNlOTMucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIwNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMDdUMjI1NDUwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9YzRjYTI3OGZjMDUyMTc0MzRkZDVjZjgwMWYyNDg0MmY2ODZhYWI0N2E3ZDY0OTg4Y2VkMTY0OWJhOTA3MzRhMyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.q25ErgwrzQiQDighTedEoBkj15O_3kdlCtEafTr867w)
in 3.14 the
get_search_terms
method ofrest_framework.filters.SearchFilter
class was returning a list of termsso we were able to iterate the search terms directly
![image](https://private-user-images.githubusercontent.com/2629328/314007637-5cc38777-058d-4be5-a237-fa04924f7b49.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5NjkxOTAsIm5iZiI6MTczODk2ODg5MCwicGF0aCI6Ii8yNjI5MzI4LzMxNDAwNzYzNy01Y2MzODc3Ny0wNThkLTRiZTUtYTIzNy1mYTA0OTI0ZjdiNDkucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIwNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMDdUMjI1NDUwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZjUxOTg5OWJkYmYwNjA3MDI0NzY0M2JjMDdhYTYzNThmNDAwNTgwZGI1OWEwZDk5YjQ3YmRmOTVkMjE4ODEzYSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.sTV5zO8F1HGh811FJv3Zr_utS-qxOWwS_uZw37kupTM)
in 3.15 the same method
![image](https://private-user-images.githubusercontent.com/2629328/314006852-6c27762a-64eb-42ef-80cc-a80cfcb8ea99.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5NjkxOTAsIm5iZiI6MTczODk2ODg5MCwicGF0aCI6Ii8yNjI5MzI4LzMxNDAwNjg1Mi02YzI3NzYyYS02NGViLTQyZWYtODBjYy1hODBjZmNiOGVhOTkucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIwNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMDdUMjI1NDUwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NGQxYjhlZWYxZTU3NWM3YmUwNWFiN2M3Njg2YjY4NjFiOTM3NDJmMTYyYjdjNWRhMWQ5ZjhjNjllYzQ4NTRkYyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.hra9dXaULb0a41tHpBwvUlV9CvWRFJH1mygejf74McM)
get_search_terms
is returning a string representationand to convert the
![image](https://private-user-images.githubusercontent.com/2629328/314007242-c6bbb17a-1463-421d-97bd-f41b3cdf7c16.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5NjkxOTAsIm5iZiI6MTczODk2ODg5MCwicGF0aCI6Ii8yNjI5MzI4LzMxNDAwNzI0Mi1jNmJiYjE3YS0xNDYzLTQyMWQtOTdiZC1mNDFiM2NkZjdjMTYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIwNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMDdUMjI1NDUwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NTgxNDg5ZWNmMTUwOWJiMmQwNWI4NTg5NDM3MDhiM2VkMGQwNDJkNjU3MzBiYTE4NjdiMDNhZjBlY2NjZGI3MyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.bnaM-b6IIpHSMOpZToRvyvbgX5F3M56izFmiBnjF8KU)
str
to alist
an additional function was introducedrest_framework.filters.search_smart_split
:and now we have to use this function to iterate the terms explicitly
![image](https://private-user-images.githubusercontent.com/2629328/314007986-f317bd30-948c-4f90-af8e-a73d6390c4f2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5NjkxOTAsIm5iZiI6MTczODk2ODg5MCwicGF0aCI6Ii8yNjI5MzI4LzMxNDAwNzk4Ni1mMzE3YmQzMC05NDhjLTRmOTAtYWY4ZS1hNzNkNjM5MGM0ZjIucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI1MDIwNyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNTAyMDdUMjI1NDUwWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MTc4NmIyNGI5MjMzZGE4NTNjODM3ZWNiNDBjNDdiYjgzZGY3ODU1ZTExOTg1OTMwODFhMWQxODY3ODlmZDgwMyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.FctVt2-gq-aMHVZi1wRtiZ84r8dZOHc63V44_YCagfA)
So the changing of return value type (and the result itself, actually) can break some custom classes, that are using the basic functionality. Moreover it's hard to figure out what is wrong, because both
list
andstr
are iterable, so the implementation works, but with the wrong results.Example:
I had a custom Search filter class based on
rest_framework.filters.SearchFilter
with overridedfilter_queryset
method, so I used the basic method to get the list of search termsand a simple iteration by search terms works well
but after upgrading to 3.15, my iteration started working differently, because now
get_search_terms
is returning a string -> so it works as iteration by string, it's adding every symbol of this string as independent query, instead of one queryfor input
?search=asd
it builds a query like thatinstead of a single search query
so we have to add using a
rest_framework.filters.search_smart_split
function explicitly everywhere to iterate search terms in an old wayis there a chance to use
search_smart_split
inside therest_framework.filters.SearchFilter.get_search_terms
to not to break backward compatibility and method behavior?The text was updated successfully, but these errors were encountered: