web-dev-qa-db-ja.com

変更方法Django管理者フィルターのタイトル

私はフィルターを持っています(デフォルトの1つでカスタムではありません)

まったく新しいカスタムフィルターを作成せずに、フィルターのタイトルを変更するだけで可能ですか?

フィルタから必要なカスタマイズはタイトルだけだからです。これは、フィルター全体とルックアップを書き直さずにそれを行う方法である必要があります。

34
iankit

willカスタムフィルタークラスが必要ですが、実際には、カスタムタイトルのフィルターが必要な場所ならどこでも使用できるカスタムフィルタークラスファクトリを実装できます。

_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を取得しているだけです)

55
lanzz

モデルのフィールドにラベルを定義すると、フィルターオプションの変更が表示されます。

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

こちらの「MyBestStaff's」はフィルターラベルです。

45