我有一个过滤器(默认的,不是自定义的)
是否仅仅改变过滤器的标题而不编写完全新的自定义过滤器是可能的吗?
因为我需要的唯一定制是其标题。应该有一种方法可以在不重写整个过滤器和查找的情况下做到这一点。
我有一个过滤器(默认的,不是自定义的)
是否仅仅改变过滤器的标题而不编写完全新的自定义过滤器是可能的吗?
因为我需要的唯一定制是其标题。应该有一种方法可以在不重写整个过滤器和查找的情况下做到这一点。
您需要创建一个自定义过滤器类,但您实际上可以实现一个自定义过滤器类工厂,您可以在任何需要具有自定义标题的过滤器的地方使用它:
您将需要拥有一个自定义的过滤器类,但是您实际上可以实现一个自定义过滤器类工厂,该工厂可用于生成任何自定义标题的过滤器。
from django.contrib import admin
def custom_titled_filter(title):
class Wrapper(admin.FieldListFilter):
def __new__(cls, *args, **kwargs):
instance = admin.FieldListFilter.create(*args, **kwargs)
instance.title = title
return instance
return Wrapper
在您的ModelAdmin
类中进行如下操作:
list_filter = (
('fieldname', custom_titled_filter('My Custom Title')),
'plain_field',
...
)
(请注意,自定义过滤器不仅仅是一个字段名,而是一个元组 (field_name, CustomFilterClass)
。您只需从您的custom_titled_filter()
工厂获取CustomFilterClass
)
admin.RelatedFieldListFilter
继承。 - simpleigh)
:('fieldname',custom_titled_filter('My Custom Title')),
- allcaps如果您在模型中为字段定义标签,您应该会在筛选选项中看到更改:比如,
is_staff = models.BooleanField(verbose_name="My Best Staff's", default=False)
"我的最佳员工"是筛选标签。
ChangeList.get_filters
或通过 Javascript 在飞行中修改标题。 - okm