Django测试开发-34- xadmin模板中添加action插件

Posted chushujin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django测试开发-34- xadmin模板中添加action插件相关的知识,希望对你有一定的参考价值。

一、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 = _(uTest 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()]

浏览器页面:

技术图片

 

以上是关于Django测试开发-34- xadmin模板中添加action插件的主要内容,如果未能解决你的问题,请参考以下文章

python测试开发django-47.xadmin上传图片和文件

python测试开发django-55.xadmin使用markdown文档编辑器(django-mdeditor)

python测试开发django-39.xadmin详情页面布局form_layout

python测试开发django-174.模板中include传递参数

python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)

Django+xadmin打造在线教育平台