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 %}
{% endblock %}
效果展示