如何修改Django管理过滤器的标题

问题描述 投票:0回答:2

我有一个过滤器(默认值之一,不是自定义的)

是否可以仅更改过滤器的标题,而不编写全新的自定义过滤器?

因为我需要从过滤器中进行的唯一自定义就是它的标题。应该有一种方法可以做到这一点,而无需重写整个过滤器和查找。

django django-admin django-filter
2个回答
100
投票

需要有一个自定义过滤器类,但您实际上可以实现一个自定义过滤器类工厂,您可以在任何需要具有自定义标题的过滤器的地方使用它:

def custom_title_filter_factory(filter_cls, title):
    class Wrapper(filter_cls):
        def __new__(cls, *args, **kwargs):
            instance = filter_cls(*args, **kwargs)
            instance.title = title
            return instance

    return Wrapper

之后在您的

ModelAdmin
课程中:

from django.contrib import admin

list_filter = (
    ('fieldname', custom_title_filter_factory(admin.RelatedFieldListFilter, 'My Custom Title')),
    'plain_field',
    ...
)

(请注意,自定义过滤器不仅仅是一个字段名称,而是一个

(field_name, CustomFilterClass)
的元组,您只是从
CustomFilterClass
工厂获取
custom_titled_filter()


66
投票

如果您在模型中的字段上定义标签,您应该会看到过滤器选项的更改:例如,

is_staff = models.BooleanField(verbose_name="My Best Staff's", default=False)

这里“我最好的员工”是过滤器标签。

© www.soinside.com 2019 - 2024. All rights reserved.