第十章, kingadmin+admin+actions 功能开发
10.1. django admin 的 action
可以自己写个函数执行批量操作
crm/admin.py
后台 admin action 就会多一个 change status, 可以修改 status 状态
执行后
10.2.kingadmin actions 功能开发
(1)crm/kingadmin.py
- (2)kingamdin/admin_base.py
- class BaseKingAdmin(object):
- list_display = []
- list_filter = []
- search_fields = []
- #只读
- readonly_fields = []
- filter_horizontal = []
- list_per_page = 5
- actions = []
- (3)table_obj_list.html
加个 action 框 +"单选 / 全选 / 全部取消"+ 执行按钮
- <form>
- <div class="row">
- <div class="col-lg-3">
- <select class="form-control" name="action">
- <option value="">-------</option>
- {% for action in admin_class.actions %}
- <option value="{{ action }}">{{ action }}</option>
- {% endfor %}
- </select>
- </div>
- <div class="col-lg-2">
- <input type="submit" value="执行" class="btn btn-primary" style="padding: 6px">
- </div>
- </div>
- </form>
给所有客户信息添加一个可选框
th 用来全选
每个 td 都要加
js 代码 (可以全选 / 取消全选)
- <script>
- function SelectALLObjs(ele) {
- if ($(ele).prop('checked')){
- $('input[row-select]').prop('checked',true)
- }else{
- $('input[row-select]').prop('checked',false)
- }
- }
- </script>
效果:
执行 action
table_obj_list.html
js 代码
- function ActionCheck(ele){
- var selected_action = $("select[name='action']").val();
- var selected_objs = $("input[row-select]").filter(":checked");
- console.log($("select[name='action']").val())
- if (!selected_action){
- alert("no action selected!")
- return false
- }
- if (selected_objs.length == 0 ){
- alert("no object selected!")
- return false
- }else {
- // 生成一个标签, 放到 form 里
- var selected_ids = [];
- $.each(selected_objs,function () {
- console.log($(this) );
- selected_ids.push($(this).val())
- })
- console.log(selected_ids)
- var input_ele = "<input type='hidden'name='selected_ids'value=" + JSON.stringify(selected_ids) + ">"
- $(ele).append(input_ele);
- }
- }
后台 kingadmin/views.py
现在就可以批量执行 action 操作了.
10.3. 添加默认的 delete action
(1)kingadmin/admin_base.html
添加一个 default_actions = ['delete_selected_objs'], 不能直接加载 actions 里面, 因为子类会覆盖父类的 actions
利用__init__方法, 把 defautl_actions 里面的值添加到 actions 里面.
- # kingadmin/admin_base.py
- import json
- from django.shortcuts import render
- class BaseKingAdmin(object):
- def __init__(self):
- self.actions.extend(self.default_actions)
- list_display = []
- list_filter = []
- search_fields = []
- #只读
- readonly_fields = []
- filter_horizontal = []
- list_per_page = 5
- default_actions = ['delete_selected_objs']
- actions = []
- def delete_selected_objs(self,request,querysets):
- querysets_ids = json.dumps([i.id for i in querysets])
- return render(request,'kingadmin/table_obj_delete.html',{'admin_class':self, #self 就是 admin_class
- 'objs':querysets,
- 'querysets_ids':querysets_ids
- })
- (2)table_obj_delete.html
(3)kingadmin/views.py
在 views 中要对 post 进行判断 (因为 "执行" 和 "确认删除" 都是 post 动作, 同时存在在 def table_obj_list 里面)
效果:
来源: https://www.cnblogs.com/derek1184405959/p/8981691.html