day27 stark组件开发之批量操作功能


思路

添加列

中间服务v1.py文件中StarkHandler类新增表头

    def display_checkbox(self, obj=None, is_header=None):
        """
        :param obj:
        :param is_header:
        :return:
        """
        if is_header:
            return "选择"
        return mark_safe('' % obj.pk)

stark组件中各个功能可以定制列增加选项

效果

功能实现

通用服务v1.py中StarkHandler类新增批量操作函数

 action_list = []

    def get_action_list(self):
        return self.action_list

    def action_multi_delete(self, request, *args, **kwargs):
        """
        批量删除(如果想要定制执行成功后的返回值,那么就为action函数设置返回值即可。)
        :return:
        """
        pk_list = request.POST.getlist('pk')
        self.model_class.objects.filter(id__in=pk_list).delete()

    action_multi_delete.text = "批量删除"

changelist_view方法新增批量操作的逻辑

        # ########## 1. 处理Action ##########
        action_list = self.get_action_list()
        action_dict = {func.__name__: func.text for func in action_list}  # {'multi_delete':'批量删除','multi_init':'批量初始化'}

        if request.method == 'POST':
            action_func_name = request.POST.get('action')
            if action_func_name and action_func_name in action_dict:
                action_response = getattr(self, action_func_name)(request, *args, **kwargs)
                if action_response:
                    return action_response


另外每个重要页面都需要加上:*args, **kwargs

stark组件各个功能定制方法

    action_list = [StarkHandler.action_multi_delete, ]

前端模板新增批量按钮

{% extends 'layout.html' %}

{% block content %}
    
{% if search_list %}
{% endif %}
{% csrf_token %} {% if action_dict %}
{% endif %} {% if add_btn %}
{{ add_btn|safe }}
{% endif %} {% for item in header_list %} {% endfor %} {% for row in body_list %} {% for ele in row %} {% endfor %} {% endfor %}
{{ item }}
{{ ele }}
{% endblock %}

效果展示

相关