Как динамически переопределить поля list_filter в Django Admin? - PullRequest
1 голос
/ 05 февраля 2020

У меня есть несколько полей в list_filter. Мне нужно создать шаблон c model.SimpleListFilter, который вызывается для каждого значения в list_filter.

Я не могу создать отдельный класс для каждого фильтра list_filter.

Лучшим решением будет что-то вроде:

class MyModelAdmin(MyCustomFilter):
    list_filter = ('client_name', 'case_received_date')` 

Методы lookups и queryset в MyCustomFilter вызывается для каждого list_filter поля.

# 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

1 Ответ

1 голос
/ 05 февраля 2020

Вы можете использовать функцию для генерации бесконечного числа анонимных классов. Вот обновление вашего кода:

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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...