自定义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)
实现的效果图如下所示: