1. 程式人生 > 其它 >自定義Django admin(後臺管理模組)的Filter過濾器

自定義Django admin(後臺管理模組)的Filter過濾器

模型類為Hero,需求為在Admin中實現Hero類以gender欄位進行過濾。

admin.py中的程式碼如下:

from django.contrib import admin
from .models import Hero

@admin.register(Hero) #註冊模型類Hero
class HeroAdmin(admin.ModelAdmin):
    '''管理Hero表在admin模組中的設定'''
    list_display = ('id', 'name, 'age', 'gender')
    search_fields = ('id', 'name')
    
    class GenderFilter(admin.SimpleListFilter):
        title = '英雄性別' #過濾標題顯示為"以 英雄性別"
        parameter_name = 'gender' #過濾器使用的過濾欄位
    
        def lookups(self, request, model_admin):
            '''針對欄位值設定過濾器的顯示效果'''
            return (
                (True, 女),
                (False, 男),
            )
        
        def queryset(self, request, queryset):
            '''定義過濾器的過濾動作'''
            if self.value() == True:
                return self.model().objects.filter(gender=True).all()
            elif self.value() == False:
                return self.model().objects.filter(gender=False).all()
    
    list_filter = (GenderFilter)