Django提供了一些选项来控制列表页的显示字段、搜索字段、过滤器等等,这些选项在应用的admin.py文件的模型管理类中使用。接下来以Goods模型为例,对常用列表页选项进行介绍。
1. list_display 选项
list_display 选项用于控制页面展示的字段,该选项的值为元组或列表类型,其中的元素可以是模型字段或自定义字段。
(1)模型字段名
使用list_display控制在页面中显示商品id和商品名称,示例如下:

(2)自定义字段
自定义字段指与模型相关,但并不包含在模型中的字段,这种字段是定义在goods/admin.py文件中的一些函数,这些函数会将模型实例作为参数。
例如,在goods/admin.py文件中定义用于显示商品销售额的自定义字段“salves_volume”,并使用sales_volume.short_description 设置该字段的功能说明。示例代码如下:

以上代码首先实例化模型类Goods,然后将实例化的模型类作为参数传递到定义的salves_volumeO函数中计算商品销售额。
使用list_display 选项控制显示salves_volume字段,代码如下:

以上代码在应用的admin.py文件中定义了Goods模型的管理类GoodsAdmin,在该类中通过 list_display 选项指定要显示的字段。
此时,刷新数据列表,可查看自定义字段显示的数据,如下图所示。

2. list_display_links选项
list_display_links选项用于设置需在页面中以链接形式展示的字段,例如:

此时页面中的id和name字段将以链接形式展示,如下图所示。

单击图6-14中商品列表部分id字段或name字段中的链接,可进入相应记录的编辑页面。
3.list_filter选项
list_filter选项用于开启列表页过滤器,该选项可以接收模型中的字段作为过滤条件,也可接收自定义过滤器。
(1)按模型字段进行过滤
以Goods模型为例,使用list_filter设置在页面中以商品名称作为过滤条件,示例如下:

列表页的过滤器会在页面右侧展示,如图所示:

(2)自定义过滤器
list_filter也支持自定义过滤器。Goods模型的数据根据商品名称可分为“Apple Mac Pro”、“Apple iPhone”、“华为”和“小米”四种类别,下面自定义根据商品类别进行筛选的过滤器。
自定义过滤器本质上是一个类,该类需要继承admin.SimpleListFilter类,并重写lookups()与queryset()方法,其中lookups()方法用于设置分类,queryset()方法用于查询分类数据。在admin.py中自定义过滤器类,示例代码如下:

以上代码定义的自定义过滤器中,类属性title表示列表页上过滤器的名称,类属性 parameter_name表示访问路由中所携带的参数名称;looksupsO方法返回一个二维元组,内层元组中的第一个元素是字符串类型的查询编号,第二个元素是过滤器类别名称元组;querysetO方法根据查询编号进行筛选,返回一个QuerySet对象。
在模型管理器中将自定义的过滤器添加到list_filter,示例如下:

刷新选择商品来修改页面,可看到自定义的过滤器,具体如图6-16所示。
网友评论