如何在Django Admin中动态覆盖列表过滤器字段?

2024-06-08 16:37:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在list_filter中有几个字段。我必须创建一个泛型model.SimpleListFilter,它为list_filter中的每个值调用

我无法为每个列表过滤器创建单独的类

最好的解决方案是:

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

为每个list_filter字段调用MyCustomFilter中的lookupsqueryset方法

# 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

Tags: nameclientdatemodeladminfilterlistclass
1条回答
网友
1楼 · 发布于 2024-06-08 16:37:11

可以使用函数生成无限多个匿名类。以下是对您的代码的更新:

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'))

相关问题 更多 >