2013-06-30 7 views
20

Mam filtr (jeden z domyślnych, a nie niestandardowa)Jak zmodyfikować Panel administracyjny Django filtra tytuł

Czy to możliwe, żeby zmienić tytuł filtra, bez napisać pełnej nowy filtr niestandardowy?

Ponieważ jedynym wymaganym dostosowaniem z filtru jest jego tytuł. Powinien to być sposób na to, bez przepisywania całego filtru i wyszukiwań.

+1

Nieoczywisty sposób, napisanie niestandardowego filtra jest najprostszym sposobem. W przeciwnym razie musisz przesłonić 'ChangeList.get_filters' lub zmodyfikować tytuł w locie poprzez JavaScript. – okm

+2

Modyfikowanie JS byłoby bardzo nie pytoniczne. Niemożliwe do śledzenia i złe podczas fazy konserwacji. – iankit

Odpowiedz

25

Ty będzie trzeba mieć klasę filtr niestandardowy, ale rzeczywiście można zaimplementować fabryki klasy niestandardowy filtr, który można wykorzystać wszędzie wystarczy filtr z tytułu niestandardowe:

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 

Po tym w swojej klasie ModelAdmin:

list_filter = (
    ('fieldname', custom_titled_filter('My Custom Title')), 
    'plain_field', 
    ... 
) 

(Zauważ, że filtr niestandardowy to nie tylko nazwa pola, ale krotką (field_name, CustomFilterClass), jesteś po prostu zaczyna swój CustomFilterClass fr om swoją fabrykę custom_titled_filter())

+1

Uwaga: musisz odziedziczyć po 'admin.RelatedFieldListFilter', jeśli chcesz filtrować wartość klucza obcego. – simpleigh

+1

@lanzz: Zamykanie ')' brakuje: '('fieldname', custom_titled_filter ('Mój niestandardowy tytuł')),' – allcaps

+0

Polecam custom_title_filter (title, Klass) –

25

jeśli zdefiniować etykiety na swoich polach w modelu, powinien pojawić się na zmianę opcji filtrujących: Jak,

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

Here „My Best Staff” jest filtr Label.

Powiązane problemy