与actions插件不同,此种插件需要更改xadmin的源码文件,建议在使用xadmin的时候,将源码安装到项目内。此插件将更改一下文件。
实现效果:
一、创建插件
1.在plugins文件夹下创建checkbox.py文件
# coding:utf-8
import xadmin
from xadmin.views import BaseAdminPlugin, ListAdminView
from django.template import loader
from xadmin.plugins.utils import get_context_dict
#checkbox 全选 全不选 反选
class CheckboxPlugin(BaseAdminPlugin):
checkbox = False#此处是为了在adminx中引用
def init_request(self, *args, **kwargs):
return bool(self.checkbox)
def block_top_toolbar(self, context, nodes):
nodes.append(loader.render_to_string('xadmin/checkbox/model_list.top_toolbar.checkbox.html', context=get_context_dict(context)))
xadmin.site.register_plugin(CheckboxPlugin, ListAdminView)
2.更改plugins文件夹下__init__.py文件
3.补全checkbox.py文件夹下需要的html,反选插件完成。
{% load i18n %}
<div class="btn-group export">
<a class="dropdown-toggle btn btn-default btn-sm" data-toggle="dropdown" href="#">
<i class="icon-share"></i> 是否选择 <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
<li><input type="checkbox" onclick="selectAll()" id="selectAll" style="margin-left: 20px">全选</li>
<li><input type="checkbox" onclick="unSelect()" id="unSelect" style="margin-left: 20px">取消全选</li>
<li><input type="checkbox" onclick="reverseSelect()" id="reverseSelect" style="margin-left: 20px">反选</li>
</ul>
<script>
$(function() {
$("#selectAll").click(function(){
$("[name = _selected_action]:checkbox").prop("checked", true);
});
$("#unSelect").click(function(){
$("[name = _selected_action]:checkbox").prop("checked", false);
});
$("#reverseSelect").click(function(){
$("[name = _selected_action]:checkbox").each(function(){
if ($(this).is(":checked")) {
$(this).prop("checked", false);
} else {
$(this).prop("checked", true);
}
});
});
});
</script>
</div>
二、xadmin引用插件
在我们自己的app项目中,adminx.py引入插件。
import xadmin
from .models import Check
class CheckAdmin(object):
#form = Scene_dudao_Form
list_display = ['task_id','problem_point']
list_filter = ['start_time','big','small']
search_fields = ['address','task_id']
checkbox = True#此处与第一步相呼应
xadmin.site.register(Check,CheckAdmin)