• stark组件开发之批量操作


    class UserInfoHandler(StartHandler):
      .......
        # 批量操作功能的列表,添加则显示, 使用此功能。需要将StartHandler.display_checkbox 添加到list_display 中
        action_list = [StartHandler.action_multi_delete, StartHandler.action_multi_init]
      .......
    class StartHandler(object):
      ........
        def action_multi_delete(self, request, *args, **kwargs):
            '''批量删除( 如果想要定制,执行成功后的返回值,那么就为这个函数,设置返回值就可以)'''
            self.model_class.objects.filter(pk__in=request.POST.getlist("pk")).delete()
            # return redirect("http://www.baidu.com")
        action_multi_delete.text = "批量删除"
    
        # 用户自定制,是否使用该功能。 只要在子类中的 action_list=[StarkHandler.multi_init] 就可以使用该功能
        def action_multi_init(self, request, *args, **kwargs):
            '''批量初始化'''
            pass
        action_multi_init.text = "批量初始化"
        # 如果像模板中,传递一个函数的话,他就会自动的执行一边。 从而前端的页面也因为这个原因,拿不到 text 的值。
        # 所以就需要在后端把这个 action_list 处理成一个字典。这件事由基类完成 {func.__name__: func.text for func in action_list}
    
        def get_list_display(self):
           ........
    
            # ####################1. 处理 Action ######################
            action_list = self.get_action_list()
            action_dict = {func.__name__: func.text for func in action_list}  # func.__name__获取函数名, func.text获取函数文本
            if request.method == "POST":
                action_func_name = request.POST.get("action")
                if action_func_name and action_func_name in action_dict:  # 前端发送过来的name 必须要在 action_dict中。
                    action_respons = getattr(self, action_func_name)(request, *args, **kwargs)
                    if action_respons:
                        return action_respons
          .........
    
          return render(request, "stark/changelist.html",
                          {"header_list": header_list, "data_list": data_list,
                           "body_list": body_list,
                           "pager": pager,
                           "add_btn": add_btn,
                           "search_list": search_list,
                           "search_value": search_value,
                           "action_dict": action_dict})
    
        action_list = []
        def get_action_list(self):
            return self.action_list
    D:prev_new_starkstarkserversstart_v1.py

    标红位置的, 部分就是。 处理此批量操作的。 功能:

    {% extends "layout.html" %}
    {% block content %}
    .......
    <form action="" method="post"> {% csrf_token %} {% if action_dict %} <div style="float: left; margin: 0 10px 5px 0"> <div class="form-inline"> <div class="form-group"> <select name="action" id="" class="form-control"> <option value="">请选择操作</option> {% for func_name, func_text in action_dict.items %} <option value="{{ func_name }}">{{ func_text }}</option> {% endfor %} </select> <input type="submit" name="" value="执行" class="btn-success btn"> </div> </div> </div> {% endif %} {% if add_btn %} <div style="float: left">{{ add_btn|safe }}</div> {% endif %} <table class="table table-bordered"> <thead> <tr> {% for head in header_list %} <th>{{ head }}</th> {% endfor %} </tr> </thead> <tbody> {% for row in body_list %} <tr> {% for ele in row %} <td>{{ ele }}</td> {% endfor %} </tr> {% endfor %} </tbody> </table> </form> </div> ...... {% endblock %}

    此部分, 使用的知识点:

    # 如果向模板中,传递一个函数的话,他就会自动的执行一边。 从而前端的页面也因为这个原因,拿不到 text 的值。
    # 所以就需要在后端把这个 action_list 处理成一个字典。这件事由基类完成 {func.__name__: func.text for func in action_list}

    {func.__name__: func.text for func in action_list}
    简单的字典生成式。
    action_list 中循环出,每一个函数对象。  func.__name__ 获取这个函数的函数名。 func.text 获取这个函数的文本信息!
    前端中:

    {% for func_name, func_text in action_dict.items %}
         <option value="{{ func_name }}">{{ func_text }}</option>
    {% endfor %}
    使用  items 方法。  获取到, 字典中的  key 和 value。  也就是函数名, 和函数文本。

    POST 提交时,将 函数名,提交给后台。 后台通过反射的 方式。 找到这个 函数。 并执行。

    并且 该函数, 也可以有返回值。 自定制批量操作成功,之后 可以跳转到,那个页面。

  • 相关阅读:
    MySql cmd下的学习笔记 —— 引擎和事务(engine,transaction)
    MySql cmd下的学习笔记 —— 有关视图的操作(algorithm)
    MySql cmd下的学习笔记 —— 有关视图的操作(建立表)
    MySql cmd下的学习笔记 —— 有关常用函数的介绍(数学函数,聚合函数等等)
    MySql cmd下的学习笔记 —— 有关多表查询的操作(多表查询练习题及union操作)
    MySql 在cmd下的学习笔记 —— 有关多表查询的操作(内连接,外连接,交叉连接)
    MySql cmd下的学习笔记 —— 有关子查询的操作(where型,from型,exists型子查询)
    MySql cmd下的学习笔记 —— 有关select的操作(order by,limit)
    剑指Offer--第21题 调整数组顺序使奇数位于偶数前面;
    剑指Offer--和为s的连续正数序列
  • 原文地址:https://www.cnblogs.com/chengege/p/10742937.html
Copyright © 2020-2023  润新知