@@ -43,18 +43,20 @@ def __new__(cls, name, bases, attrs):
4343 model = new_class ._meta .model
4444 field = filterset .get_model_field (model , filter_ .name )
4545
46- for lookup_type in filters .LOOKUP_TYPES :
46+ for lookup_expr in filters .LOOKUP_TYPES :
4747 if isinstance (field , ForeignObjectRel ):
4848 f = new_class .filter_for_reverse_field (field , filter_ .name )
4949 else :
50- f = new_class .filter_for_field (field , filter_ .name , lookup_type )
50+ f = new_class .filter_for_field (field , filter_ .name , lookup_expr )
5151 f = fix_filter_field (f )
5252
5353 # compute filter name
54- filter_name = name
54+ filter_name = LOOKUP_SEP .join ([name , lookup_expr ])
55+
5556 # Don't add "exact" to filter names
56- if lookup_type != 'exact' :
57- filter_name = LOOKUP_SEP .join ([name , lookup_type ])
57+ _exact = LOOKUP_SEP + 'exact'
58+ if filter_name .endswith (_exact ):
59+ filter_name = filter_name [:- len (_exact )]
5860
5961 new_class .base_filters [filter_name ] = f
6062
@@ -106,7 +108,7 @@ def __init__(self, *args, **kwargs):
106108 # Add an 'isnull' filter to allow checking if the relation is empty.
107109 filter_name = "%s%sisnull" % (filter_ .name , LOOKUP_SEP )
108110 if filter_name not in self .filters :
109- self .filters [filter_name ] = filters .BooleanFilter (name = filter_ .name , lookup_type = 'isnull' )
111+ self .filters [filter_name ] = filters .BooleanFilter (name = filter_ .name , lookup_expr = 'isnull' )
110112
111113 elif isinstance (filter_ , filters .MethodFilter ):
112114 filter_ .resolve_action ()
0 commit comments