一、action插件介绍
1. Action插件在数据列表页面上提供数据选择功能。可以在Action之后专门处理所选数据。批量删除功能作为默认操作提供。
2. 要启用Action,开发人员可以设置Model 中Class的属性“actions”,这是一种列表类型。
xadmin官方地址:https://xadmin.readthedocs.io/en/latest/plugins.html
二、具体操作
1. 首先需要一个Action类,继承BaseActionView
from xadmin.plugins.actions import BaseActionView class MyAction(BaseActionView): # 这里需要填写三个属性 action_name = "my_action" #: 相当于这个 Action 的唯一标示, 尽量用比较针对性的名字 description = _(u'Test selected %(verbose_name_plural)s') #: 描述, 出现在 Action 菜单中, 可以使用 ``%(verbose_name_plural)s`` 代替 Model 的名字. model_perm = 'change' #: 该 Action 所需权限 # 而后实现 do_action 方法 def do_action(self, queryset): # queryset 是包含了已经选择的数据的 queryset for obj in queryset: # obj 的操作 ... # 返回 HttpResponse return HttpResponse(...)
2. 在Model中的对应Class上应用此Action
class MyModelAdmin(object): actions = [MyAction, ]
三、实例操作
在Student列表页,我需要勾选不同的项,实现清空学生的年龄的操作,在adminx.py同一目录新建一个adminx_actions.py文件
# action_name 这个Action的唯一标示 # description 出现在 Action 菜单中名称 # model_perm 该 Action 所需权限, 总共四种(‘add', 'change', 'delete', 'view‘) # icon 显示图标 # do_action 执行的动作
adminx_actions.py
from django.http import HttpResponse from xadmin.plugins.actions import BaseActionView class ClearAction(BaseActionView): """ 清空action """ action_name = "clear_score" # 出现在 Action 菜单中名称 description = u'清空成绩 %(verbose_name_plural)s' # action的权限 model_perm = 'change' icon = 'fa fa-bug' def do_action(self, queryset): for obj in queryset: obj.student_age = 0 obj.save() return None
adminx.py
class ControlStudent(object): # 显示字段 list_display = ('student_no','student_name','student_age','student_score','student_gender','老师') # 搜索条件 search_fields = ('student_name',) # 每页显示n条 list_per_page = 5 actions = [ClearAction,] def 老师(self,obj): return [x.teacher_name for x in obj.teachers.all()]
浏览器页面: