@@ -26,6 +26,7 @@ def __get_queryset_filters(self, query_params, *args, **kwargs):
2626
2727 if getattr (self , 'filter_mappings' , None ) and query_params :
2828 filter_mappings = self .filter_mappings
29+ value_transformations = getattr (self , 'filter_value_transformations' , {})
2930
3031 try :
3132 # check and raise 400_BAD_REQUEST for invalid query params
@@ -46,15 +47,16 @@ def __get_queryset_filters(self, query_params, *args, **kwargs):
4647 # [1] ~ sign is used to exclude a filter.
4748 is_exclude = '~' in query
4849 if query in self .filter_mappings and value :
49- query = filter_mappings [query ]
50+ query_filter = filter_mappings [query ]
51+ transform_value = value_transformations .get (query , lambda val : val )
52+ transformed_value = transform_value (value )
5053 # [2] multiple options is filter values will execute as `IN` query
51- if isinstance (value , list ):
52- query += '__in'
53- if value :
54- if is_exclude :
55- excludes .append ((query , value ))
56- else :
57- filters .append ((query , value ))
54+ if isinstance (value , list ) and not query_filter .endswith ('__in' ):
55+ query_filter += '__in'
56+ if is_exclude :
57+ excludes .append ((query_filter , transformed_value ))
58+ else :
59+ filters .append ((query_filter , transformed_value ))
5860
5961 return dict (filters ), dict (excludes )
6062
0 commit comments