自定义Django admin(后台管理模块)的Filter过滤器

ⅰ亾dé卋堺 提交于 2020-03-23 19:33:16

模型类为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)

 实现的效果图如下所示:

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!