Created
November 2, 2015 11:16
-
-
Save majackson/41fc9c9e725c7f432ee5 to your computer and use it in GitHub Desktop.
A reusable list filter for displaying/filtering ArrayFields in the django admin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.contrib import admin | |
class ArrayFieldListFilter(admin.SimpleListFilter): | |
"Admin-filterable field for an ArrayList" | |
def __init__(self, request, params, model, model_admin): | |
self._choices = model._meta.get_field(self.parameter_name).base_field.choices | |
super(ArrayFieldListFilter, self).__init__(request, params, model, model_admin) | |
def lookups(self, request, model_admin): | |
""""Returns a list of tuples: | |
(lookup value, human-readable value) | |
for use in admins right sidebar | |
""" | |
return self._choices | |
def queryset(self, request, queryset): | |
"Filter based on clicked value stored in self.value()" | |
value = self.value() | |
if value: | |
queryset = queryset.filter(**{ | |
'{}__contains'.format(self.parameter_name): [value] | |
}) | |
return queryset | |
def get_arrayfield_list_filter(field_name): | |
class ArrayFieldListFilterForField(ArrayFieldListFilter): | |
parameter_name = field_name | |
title = field_name.title() | |
return ArrayFieldListFilterForField |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks a lot for this gist!
Could you please advise on how to resolve the error ? It happens when I click on any of the filtering options.
my
admin.py
looks like this: