AI智能
改变未来

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如下图:![在这里插入图片描述](https://img-blog.csdnimg.cn/20200721112354538.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI5OTQ4Mjk3,size_16,color_FFFFFF,t_70)

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) 打赏
未经允许不得转载:爱站程序员基地 » django的admin站点之自定义过滤器