Skip to content

Commit 4dba6dd

Browse files
authored
triv: #25225 added support for ArrayField in Choice filter widget (#91)
* triv: #25225 added filter widget for ArrayField * triv: #25225 added support for array filtering in choice filters
1 parent 52594ba commit 4dba6dd

File tree

1 file changed

+8
-0
lines changed

1 file changed

+8
-0
lines changed

src/django_smartbase_admin/engine/filter_widgets.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from datetime import datetime, timedelta
33

44
from django.core.exceptions import ImproperlyConfigured
5+
from django.contrib.postgres.fields import ArrayField
56
from django.db.models import Q, fields, FilteredRelation, Count
67
from django.http import JsonResponse
78
from django.utils import timezone
@@ -228,6 +229,8 @@ def get_default_label(self):
228229
return found_label[0] if found_label else default_value
229230

230231
def get_base_filter_query_for_parsed_value(self, request, filter_value):
232+
if isinstance(self.model_field, ArrayField):
233+
return Q(**{f"{self.field.filter_field}__contains": [filter_value]})
231234
return Q(**{self.field.filter_field: filter_value})
232235

233236

@@ -264,6 +267,11 @@ def __init__(
264267
self.select_all_label = select_all_label
265268

266269
def get_base_filter_query_for_parsed_value(self, request, filter_value):
270+
if isinstance(self.model_field, ArrayField):
271+
q_objects = Q()
272+
for value in filter_value:
273+
q_objects |= Q(**{f"{self.field.filter_field}__contains": [value]})
274+
return q_objects
267275
return Q(**{f"{self.field.filter_field}__in": filter_value})
268276

269277
def get_advanced_filter_operators(self):

0 commit comments

Comments
 (0)