前言

列表页优化和排序

ModelAdmin

django的options.py里面 ModelAdmin类定义的参数可以设置admin后台列表页面,相关的参数如下

class ModelAdmin(BaseModelAdmin):
"""Encapsulate all admin options and functionality for a given model.""" list_display = ('__str__',) # 显示的字段
list_display_links = () # 可点击的链接字段
list_filter = () # 过滤器
list_select_related = False
list_per_page = 100 # 每页显示100条
list_max_show_all = 200
list_editable = () # 列表页 可编辑字段
search_fields = () # 搜索条件
date_hierarchy = None # 按时间分层
save_as = False
save_as_continue = True
save_on_top = False
paginator = Paginator
preserve_filters = True
inlines = []

排序字段

后台列表页面,如果想按某个字段排序,可以加个ordering参数,比如按创建时间(creat_time)降序

备注:ordering参数在BaseModelAdmin类里面,不在ModelAdmin类,ModelAdmin继承了BaseModelAdmin

修改admin.py文件内容,加个ordering参数,create_time字段前面的-表示按降序

class ControlArticle(admin.ModelAdmin):
# 显示的字段
list_display = ('title', 'body', 'auth', 'create_time', 'update_time')
# 搜索条件
search_fields = ('title',) # 按字段排序 -表示降序
ordering = ('-create_time',) # 注册Article表
admin.site.register(models.Article, ControlArticle)

刷新页面后,就是按时间降序了

列表分页

列表页默认是设置的100个记录,我们也可以修改下设置成默认每页显示10个,设置list_per_page = 10

class ControlArticle(admin.ModelAdmin):
# 显示的字段
list_display = ('title', 'body', 'auth', 'create_time', 'update_time')
# 搜索条件
search_fields = ('title',) # 按字段排序 -表示降序
ordering = ('-create_time',) # 每页显示10条
list_per_page = 10 # 注册Article表
admin.site.register(models.Article, ControlArticle)

设置默认可编辑字段

有些字段如果想在列表页就能直接编辑,可以加个list_editable参数,这样无需进子页面,可以直接编辑列表页上的字段

如果有多个参数设置,元组里面逗号隔开就行,如 list_editable = ('body', 'auth', )

class ControlArticle(admin.ModelAdmin):
# 显示的字段
list_display = ('title', 'body', 'auth', 'create_time', 'update_time')
# 搜索条件
search_fields = ('title',) # 按字段排序 -表示降序
ordering = ('-create_time',) # 每页显示10条
list_per_page = 10 # 可编辑字段
list_editable = ('auth',) # 注册Article表
admin.site.register(models.Article, ControlArticle)

注意:title是默认的link链接字段,这个不能添加到 list_editable里面,否则会报错

编辑完之后点右下角的保存即可, 这个功能用处不大,了解下即可

link链接

列表页默认点第一个字段可进入编辑页面,如果我们想增加其它的字段也能点击进编辑页面,设置list_display_links = ('title', 'body')

class ControlArticle(admin.ModelAdmin):
# 显示的字段
list_display = ('title', 'body', 'auth', 'create_time', 'update_time')
# 搜索条件
search_fields = ('title',) # 按字段排序 -表示降序
ordering = ('-create_time',) # 每页显示10条
list_per_page = 10 # 可编辑字段
list_editable = ('auth',) # 设置哪些字段可以点击进入编辑界面
list_display_links = ('title', 'body') # 注册Article表
admin.site.register(models.Article, ControlArticle)

这样点标题和正文都能进编辑页面了

过滤器

如果想快速方便找到作者对应的文字,可以添加过滤器,显示到列表页面右边,如设置list_filter = ('auth', 'title')

class ControlArticle(admin.ModelAdmin):
# 显示的字段
list_display = ('title', 'body', 'auth', 'create_time', 'update_time')
# 搜索条件
search_fields = ('title',) # 按字段排序 -表示降序
ordering = ('-create_time',) # 每页显示10条
list_per_page = 10 # 可编辑字段
list_editable = ('auth',) # 设置哪些字段可以点击进入编辑界面
list_display_links = ('title', 'body') # 过滤器
list_filter = ('auth', 'title') # 注册Article表
admin.site.register(models.Article, ControlArticle)

显示效果如下,点右侧作者名称,快速找到相关内容

按时间分层

date_hierarchy参数默认为None,设置一个时间字段,可以按时间分层删选

class ControlArticle(admin.ModelAdmin):
# 显示的字段
list_display = ('title', 'body', 'auth', 'create_time', 'update_time')
# 搜索条件
search_fields = ('title',) # 按字段排序 -表示降序
ordering = ('-create_time',) # 每页显示10条
list_per_page = 10 # 可编辑字段
list_editable = ('auth',) # 设置哪些字段可以点击进入编辑界面
list_display_links = ('title', 'body') # 过滤器
list_filter = ('auth', 'title') # 时间分层
date_hierarchy = 'create_time' # 注册Article表
admin.site.register(models.Article, ControlArticle)

python测试开发django-23.admin列表页优化和排序的更多相关文章

  1. python测试开发django-36.一对一(OneToOneField)关系查询

    前言 前面一篇在xadmin后台一个页面显示2个关联表(OneToOneField)的字段,使用inlines内联显示.本篇继续学习一对一(OneToOneField)关系的查询. 上一篇list_d ...

  2. python测试开发django-rest-framework-63.基于函数的视图(@api_view())

    前言 上一篇讲了基于类的视图,在REST framework中,你也可以使用常规的基于函数的视图.它提供了一组简单的装饰器,用来包装你的视图函数, 以确保视图函数会收到Request(而不是Djang ...

  3. python测试开发django-197.django-celery-beat 定时任务

    前言 django-celery-beat 可以支持定时任务,把定时任务写到数据库. 接着前面这篇写python测试开发django-196.python3.8+django2+celery5.2.7 ...

  4. python测试开发django-16.JsonResponse返回中文编码问题

    前言 django查询到的结果,用JsonResponse返回在页面上显示类似于\u4e2d\u6587 ,注意这个不叫乱码,这个是unicode编码,python3默认返回的编码 遇到问题 接着前面 ...

  5. python测试开发django-15.查询结果转json(serializers)

    前言 django查询数据库返回的是可迭代的queryset序列,如果不太习惯这种数据的话,可以用serializers方法转成json数据,更直观 返回json数据,需要用到JsonResponse ...

  6. 2019第一期《python测试开发》课程,10月13号开学

    2019第一期<python测试开发>课程,10月13号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:10月13号-12月8号,每周六.周日晚上20: ...

  7. Python测试开发-创建模态框及保存数据

    Python测试开发-创建模态框及保存数据 原创: fin  测试开发社区  前天 什么是模态框? 模态框是指的在覆盖在父窗体上的子窗体.可用来做交互,我们经常会看到模态框用来登录.确定等等,到底是怎 ...

  8. Python测试开发-浅谈如何自动化生成测试脚本

    Python测试开发-浅谈如何自动化生成测试脚本 原创: fin  测试开发社区  前天 阅读文本大概需要 6.66 分钟. 一 .接口列表展示,并选择 在右边,点击选择要关联的接口,区分是否要登录, ...

  9. 《Python测试开发技术栈—巴哥职场进化记》—前言

    写在前面 今年从4月份开始写一本讲Python测试开发技术栈的书,主要有两个目的,第一是将自己掌握的一些内容分享给大家,第二是希望自己能系统的梳理和学习Python相关的技术栈.当时我本来打算以故事体 ...

随机推荐

  1. **CI创建类库(创建自己的工具类等)

    创建类库 当我们使用术语"类库"时,我们一般指的是位于libraries 文件夹中的类,它们在wiki的"类库参考"这个板块被讨论.在当前这个话题中,我们将讨论 ...

  2. 使用 JavaScript 编写优化算法 (1)

    之前一直用Python来写优化算法,为了增强 JS 的熟练程度,开始将原有的代码改写成 JS.采用的工具包括 node.js + Grunt + nodeunit + github + npm + t ...

  3. maven windows 环境变量

    MAVEN_HOME,内容是解压的maven文件路径 Path中添加 %MAVEN_HOME%\bin 为了测试安装成功,打开命令提示符,输入 mvn -version

  4. laravel Tinker报错 BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder

    进行模型关联操作, php artisan tinker 执行 $user = App\Models\User::find(1) $user->followings()->attach([ ...

  5. WebStorm failing to start with 'idea.system.path' error

    WebStorm failing to start with 'idea.system.path' error Ask Question up vote 2 down vote favorite   ...

  6. Javascript中DOM详解与学习

    DOM(文档对象模型)是针对html和XML文档的一个API(应用程序编程接口).DOM描绘了一个层次化的节点树,允许开发人员添加,移除和修改页面的某一部分.下面将从这几个层次来学习. 一.节点层次 ...

  7. 纯css滚动视差

    1.何为滚动视差 视差滚动(Parallax Scrolling)是指让多层背景以不同的速度移动,形成立体的运动效果,带来非常出色的视觉体验. 作为网页设计的热点趋势,越来越多的网站应用了这项技术.效 ...

  8. 添加第一个控制器(Controllers)

    在MVC体系架构中,输入请求是由控制器Controller来处理的(负责处理浏览器请求,并作出响应).在ASP.NET MVC中Controller本身是一个类(Class)通常继承于System.W ...

  9. Codeforces Round #549 (Div. 1) 题解

    link 前几天补完了某一场很早以前的div1,突然想来更博客,于是就有了这篇文章 A The Beatles 显然若起点和第一次到达的位置距离为 d ,那么经过的不同站点数为 $\frac{nk}{ ...

  10. poj 2253 最短路floyd **

    题意:有两只青蛙和若干块石头,现在已知这些东西的坐标,两只青蛙A坐标和青蛙B坐标是第一个和第二个坐标,现在A青蛙想要到B青蛙那里去,并且A青蛙可以借助任意石头的跳跃,而从A到B有若干通路,问从A到B的 ...