自定义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)

 实现的效果图如下所示:

 

posted @ 2020-03-23 18:54  韩晓萌  阅读(1973)  评论(2编辑  收藏  举报