2013-06-30 30 views
20

Tôi có một bộ lọc (một trong những giá trị mặc định và không tùy chỉnh)Làm thế nào để sửa đổi tên Django quản trị bộ lọc của

Có thể chỉ để thay đổi tiêu đề của bộ lọc, mà không cần viết một bộ lọc tùy chỉnh đầy đủ mới?

Do tùy chỉnh duy nhất tôi cần từ bộ lọc là tiêu đề của nó. Đây phải là một cách để làm điều đó mà không cần viết lại toàn bộ bộ lọc và tra cứu.

+1

Không có cách nào rõ ràng, viết bộ lọc tùy chỉnh là cách dễ nhất. Nếu không, bạn cần ghi đè 'ChangeList.get_filters' hoặc sửa đổi tiêu đề trực tuyến thông qua Javascript. – okm

+2

Sửa đổi JS sẽ rất không phải là pythonic. Không thể traceback và xấu trong giai đoạn bảo trì. – iankit

Trả lời

25

Bạn sẽ cần phải có một lớp lọc tùy chỉnh, nhưng bạn thực sự có thể thực hiện một nhà máy lớp lọc tùy chỉnh mà bạn có thể sử dụng ở khắp mọi nơi bạn chỉ cần một bộ lọc với một tiêu đề tùy chỉnh:

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 

Sau đó trong ModelAdmin lớp học của bạn:

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

(Lưu ý cách các bộ lọc tùy chỉnh không chỉ là một tên trường, nhưng một tuple của (field_name, CustomFilterClass), bạn chỉ nhận được CustomFilterClass fr của bạn om nhà máy custom_titled_filter() của bạn)

+1

Lưu ý rằng bạn sẽ cần phải kế thừa từ 'admin.RelatedFieldListFilter' nếu bạn muốn lọc trên một giá trị khóa ngoài. – simpleigh

+1

@lanzz: Đóng ')' bị thiếu: '('tên trường', custom_titled_filter ('Tiêu đề Tuỳ chỉnh')),' – allcaps

+0

Tôi muốn giới thiệu custom_title_filter (tiêu đề, Klass) –

25

nếu bạn xác định nhãn trên các lĩnh vực của bạn trong mô hình của bạn, bạn sẽ thấy sự thay đổi về các lựa chọn bộ lọc: Giống như,

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

Here "Nhân viên xuất sắc nhất của tôi" là bộ lọc Label.

Các vấn đề liên quan