admin中的管理动作(action)

admin.actions选项适用于需要同时对很多对象进行相同更改。它可以让你编写和注册actions(django中一般会自带一个删除选定对象的actions)。

注意:该actions使用了QuerySet.delete()方法,如果模型中自定义了delete()方法,则你的delete将不会被调用。如果想要覆盖该方法,只能重写ModelAdmin.delete_queryset()或自定义一个actions

一、编写actions

动作函数是常规函数,一般有三个参数:

  • 当前ModelAdmin;
  • 代表当前请求的HttpResponse;
  • 包含用户选择对象集合的QuerySet。

一个完整的动作函数及其注册内容如下:

注意:actions中的内容为字符串,若为函数名将会报错。

原因:python执行类定义是按照顺序执行的;但在django admin中看到字符串时,不会立即查找方法,而是记录下来,当真正需要执行actions时,django才通过名称查找方法。

拓展:

为了用户友好交互,可以使用self向用户发送一条消息,通知其操作成功。

二、提供中间页的actions

默认情况下,执行完操作会被重定向回原来的变更列表页面。但有时候特殊需要,可以返回一个中间页。

思想:当执行完某操作后,返回一个HttpResponseRedirect,将用户重新定向到你编写的视图中。

  • values_list:获取指定字段的值
  • ContentType:是django的内容类型框架,每个模型都有一个对应的contenttype记录
  • get_for_model:用于知道导出的是那个模型的数据

三、整个站点提供actions

四、禁用actions

1、禁用全站点actions

上述表示删除内置的delete_selected动作,该动作将不再在全站范围内使用。

同时如果需要重启该方法:

2、禁用特定modeladmin的所有动作

如果该modeladmin没有批量操作则只需:

3、有条件的启用或禁用动作

思想:可以先用get_actions获取到该站点的动作,再根据条件禁用或启动;

4、设置动作权限

action装饰器中通过传递permissions参数,限制其对特定权限的用户的可用性。

上述含义:make_published只提供给通过ModelAdmin.has_change_permission()检查的用户

permissions其他检查方法如下:

五、action装饰器

这个装饰器可以用来设置定义动作函数的特定属性,就比如使用description描述该函数的作用:

这就相当于直接在函数上设置一些属性:

相关推荐
NotFound4861 分钟前
CSS如何利用Flex实现悬浮的侧边按钮组_利用fixed定位与flex布局组合
jvm·数据库·python
神の愛2 分钟前
@Pattern,@NotBlank
数据库·mysql
qq_189807036 分钟前
Golang怎么实现RBAC权限控制_Golang如何用casbin实现基于角色的访问控制系统【教程】
jvm·数据库·python
vegetablec8 分钟前
CSS如何处理相对定位留下的原本占位空白_认识到相对定位不会脱离文档流,需借助负margin消除视觉空隙
jvm·数据库·python
2401_8326355812 分钟前
HTML怎么创建响应式图片备选方案_HTML srcset与sizes结构【详解】
jvm·数据库·python
浅念-14 分钟前
从LeetCode入门位运算:常见技巧与实战题目全解析
数据结构·数据库·c++·笔记·算法·leetcode·牛客
Chasing__Dreams22 分钟前
Mysql--基础知识点--99--两个线程同时给同一个间隙加锁 造成死锁的原因
数据库·mysql
2301_7641505627 分钟前
Pandas GroupBy:将分组数据聚合为列表并赋值到新列
jvm·数据库·python
NotFound48629 分钟前
c++ 逆向工程ida pro c++如何使用ida pro插件和脚本
jvm·数据库·python
qq_1898070331 分钟前
CSS如何根据浏览器支持引入样式_利用@supports进行条件加载
jvm·数据库·python