@@ -164,49 +164,38 @@ def add_result_filter(field_name, _filter, filter_expressions, project):
164164 from django .db .models .expressions import RawSQL
165165 from tasks .models import Annotation , Prediction
166166
167- # new approach with contain instead of icontains
168- if flag_set ('ff_back_2214_annotation_result_12052022_short' , project .organization .created_by ):
167+ flag = flag_set ('ff_back_dev_3865_filters_anno_171222_short' , project .organization .created_by )
168+ if field_name == 'annotations_results' and flag :
169+ subquery = Q (id__in =
170+ Annotation .objects
171+ .annotate (json_str = RawSQL ('cast(result as text)' , '' ))
172+ .filter (Q (project = project ) & Q (json_str__contains = _filter .value ))
173+ .values_list ('task' , flat = True )
174+ )
175+ else :
169176 _class = Annotation if field_name == 'annotations_results' else Prediction
170177 subquery = Exists (
171178 _class .objects
172179 .annotate (json_str = RawSQL ('cast(result as text)' , '' ))
173180 .filter (Q (task = OuterRef ('pk' )) & Q (json_str__contains = _filter .value ))
174181 )
175182
176- if _filter .operator in [Operator .EQUAL , Operator .NOT_EQUAL ]:
177- try :
178- value = json .loads (_filter .value )
179- except :
180- return 'exit'
181-
182- q = Exists (_class .objects .filter (Q (task = OuterRef ('pk' )) & Q (result = value )))
183- filter_expressions .append (q if _filter .operator == Operator .EQUAL else ~ q )
184- return 'continue'
185- elif _filter .operator == Operator .CONTAINS :
186- filter_expressions .append (Q (subquery ))
187- return 'continue'
188- elif _filter .operator == Operator .NOT_CONTAINS :
189- filter_expressions .append (~ Q (subquery ))
190- return 'continue'
191-
192- # old approach
193- else :
194- name = 'annotations__result' if field_name == 'annotations_results' else 'predictions__result'
195- if _filter .operator in [Operator .EQUAL , Operator .NOT_EQUAL ]:
196- try :
197- value = json .loads (_filter .value )
198- except :
199- return 'exit'
200-
201- q = Q (** {name : value })
202- filter_expressions .append (q if _filter .operator == Operator .EQUAL else ~ q )
203- return 'continue'
204- elif _filter .operator == Operator .CONTAINS :
205- filter_expressions .append (Q (** {name + '__icontains' : _filter .value }))
206- return 'continue'
207- elif _filter .operator == Operator .NOT_CONTAINS :
208- filter_expressions .append (~ Q (** {name + '__icontains' : _filter .value }))
209- return 'continue'
183+ if _filter .operator in [Operator .EQUAL , Operator .NOT_EQUAL ]:
184+ try :
185+ value = json .loads (_filter .value )
186+ except :
187+ return 'exit'
188+
189+ q = Exists (_class .objects .filter (Q (task = OuterRef ('pk' )) & Q (result = value )))
190+ filter_expressions .append (q if _filter .operator == Operator .EQUAL else ~ q )
191+ return 'continue'
192+ elif _filter .operator == Operator .CONTAINS :
193+ filter_expressions .append (Q (subquery ))
194+ return 'continue'
195+ elif _filter .operator == Operator .NOT_CONTAINS :
196+ filter_expressions .append (~ Q (subquery ))
197+ return 'continue'
198+
210199
211200
212201def add_user_filter (enabled , key , _filter , filter_expressions ):
0 commit comments