Skip to content

Commit 93fad80

Browse files
committed
Add value transformation logic
1 parent 83fa9b9 commit 93fad80

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

filters/mixins.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)