1、添加excel插件逻辑
首先在 xadmin 的 plugins 下新建一个 excel.py文件,插入代码如下:
# coding:utf-8
import xadmin
from xadmin.views import BaseAdminPlugin, ListAdminView
from xadmin.plugins.utils import get_context_dict
from django.template import loader
# excel 导入
class ListImportExcelPlugin(BaseAdminPlugin):
import_excel = False
# 入口函数, 通过此属性来指定此字段是否加载此字段
def init_request(self, *args, **kwargs):
return bool(self.import_excel)
# 如果加载, 则执行此函数添加一个 导入 字段
def block_top_toolbar(self, context, nodes):
context = get_context_dict(context or {}) # 用此方法来转换
nodes.append(loader.render_to_string('xadmin/excel/model_list.top_toolbar.import.html', context=context))
xadmin.site.register_plugin(ListImportExcelPlugin, ListAdminView)
2、在xadmin中注册excel插件
把excel注册到 xadmin/plugins/__init__
.py文件中
3、添加excel前面模板
在xadmin的 templates/xadmin/ 目录下新建一个excel目录,新建模板文件model_list.top_toolbar.import.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><a data-toggle="modal" data-target="#export-modal-import-excel"><i class="icon-circle-arrow-down"></i> 导入
Excel</a></li>
</ul>
<script>
function fileChange(target) {
//检测上传文件的类型
var imgName = document.all.submit_upload.value;
var ext, idx;
if (imgName == '') {
document.all.submit_upload_b.disabled = true;
alert("请选择需要上传的 xls 文件!");
return;
} else {
idx = imgName.lastIndexOf(".");
if (idx != -1) {
ext = imgName.substr(idx + 1).toUpperCase();
ext = ext.toLowerCase();
{# alert("ext="+ext);#}
if (ext != 'xls' && ext != 'xlsx') {
document.all.submit_upload_b.disabled = true;
alert("只能上传 .xls 类型的文件!");
return;
}
} else {
document.all.submit_upload_b.disabled = true;
alert("只能上传 .xls 类型的文件!");
return;
}
}
}
</script>
<div id="export-modal-import-excel" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" action="" enctype="multipart/form-data">
{% csrf_token %}
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">导入 Excel</h4>
</div>
<div class="modal-body">
<input type="file" onchange="fileChange(this)" name="excel" id="submit_upload">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button>
<button class="btn btn-success" type="submit" id="submit_upload_b"><i class="icon-share"></i> 导入
</button>
</div>
</form>
</div><!-- /.modal-content -->
</div><!-- /.modal-dalog -->
</div><!-- /.modal -->
</div>
4、字段展示处理
在相关 class 中通过此字段进行处理,设置为 True 表示可以添加导入字段:
import_excel = True
class InformationContentXadmin(object):
"""内容编辑"""
........
import_excel = True
5、逻辑处理
在相关的 class 中重写 post 方法
def post(self, request, *args, **kwargs):
# 导入逻辑
if 'excel' in request.FILES:
pass # 此处是一系列的操作接口, 通过 request.FILES 拿到数据随意操作
return super(CourseAdmin, self).post(request, args, kwargs) # 此返回值必须是这样