Skip to content

Instantly share code, notes, and snippets.

@niccolomineo
Last active August 9, 2023 22:13
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save niccolomineo/bc48e01d4a9563d45039ae59005b2ac0 to your computer and use it in GitHub Desktop.
Save niccolomineo/bc48e01d4a9563d45039ae59005b2ac0 to your computer and use it in GitHub Desktop.
Django ArrayField inheritable list filter
"""Django filters."""
from django.contrib.admin import SimpleListFilter
class ArrayFieldListFilter(SimpleListFilter):
"""An admin list filter for ArrayFields."""
def lookups(self, request, model_admin):
"""Return the filtered queryset."""
queryset_values = model_admin.model.objects.values_list(
self.parameter_name, flat=True
)
values = []
for sublist in queryset_values:
if sublist:
for value in sublist:
if value:
values.append((value, value))
else:
values.append(("null", "-"))
return sorted(set(values))
def queryset(self, request, queryset):
"""Return the filtered queryset."""
lookup_value = self.value()
if lookup_value:
lookup_filter = (
{"{}__isnull".format(self.parameter_name): True}
if lookup_value == "null"
else {"{}__contains".format(self.parameter_name): [lookup_value]}
)
queryset = queryset.filter(**lookup_filter)
return queryset
@hipertracker
Copy link

It does not work with multiple values.

@niccolomineo
Copy link
Author

It does not work with multiple values.

What is your use case exactly?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment