• 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 = _(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()]

    浏览器页面:

  • 相关阅读:
    Windows 7下 搭建 基于 ssh 的sftp 服务器
    理解ThreadLocal(二)
    理解ThreadLocal(一)
    Putty使用公钥认证时,报错:Disconnected: No supported authentication methods available(server sent:public key) 问题的解决
    SFTP信任公钥配置及JSCH库
    怎样在WIN7系统下安装IIS
    深入研究B树索引(一)
    【转】EntityFramework(EF)贪婪加载和延迟加载的选择和使用
    【转】Ext JS 集合1713个icon图标的CSS文件
    [转]ASP.NET MVC 4 最佳实践宝典
  • 原文地址:https://www.cnblogs.com/chushujin/p/12614631.html
Copyright © 2020-2023  润新知