• python测试开发django-46.xadmin添加action动作


    前言

    Action插件在数据列表页面上提供数据选择功能。可以在Action之后专门处理所选数据。批量删除功能作为默认操作提供。

    action文档

    要启用Action,开发人员可以设置Model OptionClass的属性“actions”,这是一种列表类型。xadmin官方文档地址https://xadmin.readthedocs.io/en/latest/plugins.html
    默认情况下,xadmin已启用DeleteSelectedAction,它提供了从列表视图中删除所选项目的选项。您还可以实现自定义的Action类,请参阅以下示例。
    首先需要一个Action类,它是BaseActionView的子类。BaseActionView是以下的子类ModelAdminView:

    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(...)
    

    然后在Model中的OptionClass上应用此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'       # 该 Action 所需权限
        icon = 'fa fa-bug'
    
        # 执行的动作
        def do_action(self, queryset):
            for obj in queryset:
                # 需执行model对应的字段
                obj.score = '0'     # 重置score为0
                obj.save()
            # return HttpResponse
            return None  # 返回的url地址
    

    接下来在adminx.py注册表的时候添加一项actions=[ClearAction,]

    # adminx.py
    import xadmin
    from .models import Student
    from .xadmin_action import ClearAction
    
    class ControlStudent(object):
        # 显示的字段
        list_display = ['student_id', 'name', 'age', 'score',]
        # 搜索条件
        search_fields = ('name',)
    
        # 每页显示10条
        list_per_page = 10
    
        actions = [ClearAction, ]
    
    xadmin.site.register(Student, ControlStudent)
    

    实现效果

    打开学生表列表页,勾选需要清除的行,左下角执行动作里面有个“清除成绩的选项”

    点击后页面会自动刷新,成绩变成0

  • 相关阅读:
    从0开始学习自动化框架Airtest
    测试经理必知必会-Kanban和Scrum区别
    测试工程师的福音-如何使用Sonar完成代码质量检测
    看了很多文章,就这篇说明白了什么是接口测试
    测试经理必知必会:敏捷模型之Kanban
    Selenium元素定位不到?JS注入轻松搞定!
    测试经理必知必会:敏捷开发3355原则
    我知道你会冒泡排序,但是你会优化冒泡排序吗?
    快来使用Portainer让测试环境搭建飞起来吧
    给个MySQL,打算怎么测试?
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/10649960.html
Copyright © 2020-2023  润新知