Reputation: 17822
I have several fields in list_filter
. I have to create a generic model.SimpleListFilter
that is called for every value in list_filter
.
I cannot create individual class for every list_filter.
The best solution would be something like:
class MyModelAdmin(MyCustomFilter):
list_filter = ('client_name', 'case_received_date')`
The lookups
and queryset
method in MyCustomFilter
gets called for each list_filter
field.
# admin.py
class MyModelAdmin(admin.ModelAdmin):
list_display = ('client_name','client_application_number')
list_filter = ('client_name', 'case_received_date', MyCustomFilter)
class MyCustomFilter(admin.SimpleListFilter):
def lookups(self, request, model_admin):
pass
def queryset(self, request, queryset):
# Apply the filter selected, if any
pass
Upvotes: 1
Views: 1606
Reputation: 2269
You can use a function to generate an infinite number of anonymous classes. Here's an update to your code:
class MyCustomFilter(admin.SimpleListFilter):
def lookups(self, request, model_admin):
pass
def queryset(self, request, queryset):
# Apply the filter selected, if any
pass
def my_custom_filter_maker(field):
class MyAnonymousCls(MyCustomFilter):
title = field
parameter_name = field
return MyAnonymousCls
class MyModelAdmin(admin.ModelAdmin):
list_display = ('client_name','client_application_number')
list_filter = ('client_name', 'case_received_date',
my_custom_filter_maker('field_name'), my_custom_filter_maker('another_field'))
Upvotes: 4