django的admin站点之自定义过滤器
·
要实现自定义过滤器,要继承Django admin提供的SimpleListFilter类来实现自定义过滤器,之后需要把自定义过滤器配置到ModelAdmin中即可。
SimpleListFilter类提供了两个属性和两个方法来供我们重写。这两个属性为title,paramter_name,两个方法为lookups,queryset。两个属性的作用顾名思义,title用于展示标题,parameter_name就是设定查询时URL参数的名字,比如设定parameter_name='owner_category'查询分类id为1的内容时,URL后面的Query部分是?owner_category=1, 此时就可以通过我们的过滤器拿到这个id,从而进行过滤。
两个方法的作用如下:
lookups:返回要展示的内容和查询用的id
如下图:

queryset:根据URL Query的内容返回列表页数据。
示例代码:
class CategoryOwnerFilter(admin.SimpleListFilter):
title="分类过滤器"
paramter_name = 'owner_category'
def lookups(self, request, model_admin):
return Category.objects.filter(owner=reqeust.user).values_list('id', 'name')
# lookups用于在侧栏显示过滤的项
def queryset(self, request, queryset):
category_id = self.value()
if category_id:
return queryset.filter(category_id=self.value()) # model中存在category_id这个字段
# 注意这个queryset是列表页的query也就是它不属于Category模型,假设此例中的列表页对应的model为Category模型
# self.value的值来自lookups设置的id值
return queryset
更多推荐
所有评论(0)